浏览 5525 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-02-08
登录系统后随便点哪个链接都会退出系统。下面贴出我的部分代码: 配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="encodingInterceptor" class="com.cm.web.interceptor.EncodingInterceptor"/> <bean id="securityInterceptor" class="com.cm.web.interceptor.SecurityInterceptor"/> <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="defaultErrorView"> <value>error</value> </property> <property name="exceptionMappings"> <props> <prop key="java.lang.Exception">error</prop> </props> </property> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> <property name="basename"><value>cm</value></property> <property name="defaultParentView"><value>modelView</value></property> </bean> <!--Not Need Logon.......................--> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="interceptors"> <list> <ref local="encodingInterceptor"/> </list> </property> <property name="mappings"> <props> <prop key="/login.do">accountController</prop> <prop key="/loginproc.do">accountController</prop> <prop key="/passwordmod.do">accountController</prop> <prop key="/passmodprocess.do">accountController</prop> <prop key="/forgetpassword.do">accountController</prop> <prop key="/forgetpasswordprocess.do">accountController</prop> </props> </property> </bean> <!--Need Logon....................................--> <bean id="securityUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="interceptors"> <list> <ref local="encodingInterceptor"/> <ref local="securityInterceptor"/> </list> </property> <property name="mappings"> <props> <prop key="/index.do">indexController</prop> <prop key="/resource/resourceIndex.do">indexController</prop> <prop key="/department/departmentMember.do">indexController</prop> <prop key="/index/linkmanGcheng.do">indexController</prop> <prop key="/index/linkmanJsdw.do">indexController</prop> <prop key="/index/linkmanXy.do">indexController</prop> <prop key="/index/customerXyIndex.do">indexController</prop> <prop key="/index/customerDZD.do">indexController</prop> </props> </property> </bean> <bean id="cmMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver"> <property name="mappings"> <props> <prop key="/login.do">handleLoginView</prop> <prop key="/loginproc.do">handleLoginProcess</prop> <prop key="/index.do">handleIndex</prop> <prop key="/passwordmod.do">handleModifyPasswordView</prop> <prop key="/passmodprocess.do">handleModifyPasswordProcess</prop> <prop key="/forgetpassword.do">handelForgetPassword</prop> <prop key="/forgetpasswordprocess.do">handleForgetPasswordProcess</prop> <prop key="/resource/resourceIndex.do">handelIndexResource</prop> <prop key="/department/departmentMember.do">handleDepartmentMember</prop> <prop key="/index/linkmanGcheng.do">handleLinkmanGcheng</prop> <prop key="/index/linkmanJsdw.do">handleLinkmanJsdw</prop> <prop key="/index/linkmanXy.do">handleLinkmanXy</prop> <prop key="/index/customerXyIndex.do">handleCustomerXyIndex</prop> <prop key="/index/customerDZD.do">handleIndexCustomerDZD</prop> </props> </property> </bean> <bean id="accountController" class="com.cm.web.controller.AccountController"> <property name="methodNameResolver"><ref local="cmMethodNameResolver"/></property> <property name="userService"><ref bean="userService"/></property> </bean> <bean id="indexController" class="com.cm.main.web.controller.IndexController"> <property name="methodNameResolver"><ref local="cmMethodNameResolver"/></property> <property name="generalService"><ref bean="generalService"/></property> <property name="userService"><ref bean="userService"/></property> </bean> </beans> 登录代码 public class AccountController extends AbstractSuperController { //登录系统代码 public ModelAndView handleLoginProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException { try { User user = new User(); String username = request.getParameter("username"); String password = request.getParameter("password"); user.setName(username); user.setPassword(password); user = userService.selectUserByUsernameAndPassword(user); if (null != user) { log.info("User " + user.getName() + " Department " + user.getCmdeptname() + " logon..................."); HttpSession session = request.getSession(true); session.setMaxInactiveInterval(3600); //WebUtils.setSessionAttribute(request, "user", user); session.setAttribute("user", user); Cookie cookie = new Cookie("username", encode(username)); cookie.setMaxAge(60 * 60 * 24 * 365); response.addCookie(cookie); return new ModelAndView(new RedirectView("/cm/index.do")); } } catch (Exception e) { log.error("", e); } return new ModelAndView(new RedirectView("/cm/login.do")); } } 拦截器代码 public class SecurityInterceptor extends HandlerInterceptorAdapter { protected final Log log = LogFactory.getLog(SecurityInterceptor.class); public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // User user = (User) WebUtils.getSessionAttribute(request, "user"); // if (user == null) { // ModelAndView modelAndView = new ModelAndView(new RedirectView( // "/cm/login.do")); // log.info("user is // logout............................................."); // throw new ModelAndViewDefiningException(modelAndView); // } else { // return true; // } ModelAndView modelAndView = new ModelAndView(new RedirectView( "/cm/login.do")); HttpSession session = request.getSession(false); if (null == session) { throw new ModelAndViewDefiningException(modelAndView); } User user = (User) session.getAttribute("user"); if (user == null) { log.info("#user is logout............."); throw new ModelAndViewDefiningException(modelAndView); } return true; } } 因为我在拦截器中配置session失效则自动到首页。 在login.jsp页面写如下代码: <% java.util.Enumeration headers = request.getHeaderNames(); while(headers.hasMoreElements()) { String headName = (String)headers.nextElement(); String headValue = request.getHeader(headName); out.println(headName+"="+headValue+"<br>"); } %> 打印出的结果如下: JSESSIONID=FKyzH2hmpdjJ2vZrZjY0HvM68K4FnvnDTrwLJm4ZT0hwR121tCCS!-401940707 JSESSIONID=FKyF42pkgshMDlKzPnv6tP196b2wrGqJH1Q4wVrhBTJSj16JnJm3!-401940707 JSESSIONID=FKyhDPvVrZ2zJfJkyCNQLTyDy2QBZ2ym6ZhsPJKGVQw19KxZm1Jm!-401940707 只贴出了JSESSIONID的部分,我奇怪的是为什么浏览器会发送不同的JSESSIONID. 而通过计算机名称访问则没有任何问题。另外在本机部署一个老的应用用Struts开发,无论通过IP还是计算机名访问都无问题,第一次碰到这种问题,束手无策,另外声明我在web.xml中没有进行任何有关session的配置。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-02-08
Cookie cookie = new Cookie("username", encode(username)); cookie.setMaxAge(60 * 60 * 24 * 365); response.addCookie(cookie); 建议楼主去掉以上的代码再试试看 |
|
返回顶楼 | |
发表时间:2007-02-08
magice 写道 Cookie cookie = new Cookie("username", encode(username)); cookie.setMaxAge(60 * 60 * 24 * 365); response.addCookie(cookie); 建议楼主去掉以上的代码再试试看 现在不能试验,明早上班试验下,另外我测试过将securityInterceptor去掉,也是会有同样的问题,基本判断应该与securityInterceptor无关,晕,关键是通过http://hostname:80/cm 访问没有问题,而通过http://192.168.1.143:80 则有问题,奇怪的很! 而且通过http://192.168.1.143:80/cm 这种方式访问也不是每次都失败,不过基本5次会有4次是失败的. |
|
返回顶楼 | |
发表时间:2007-02-08
路过!多一句嘴.我以前好像有过一次是这样,记得好像清空了一次浏览器的临时文件和cookie.不知道你是不是这种情况.
|
|
返回顶楼 | |
发表时间:2007-02-08
男儿当 写道 路过!多一句嘴.我以前好像有过一次是这样,记得好像清空了一次浏览器的临时文件和cookie.不知道你是不是这种情况. 清了好多次了,关键是好几台机器对服务器的访问都不正常.
大家使用Spring MVC都是如何处理用户登录的,能否贴段用户登录的代码上来? 我这样使用Spring是否正确,希望能多给点建议. 明天写一个Session 的Listener监测下Session的创建和销毁的情况,希望能有所收获,马上要上线了,出了这个莫名其妙的问题.哎... ... |
|
返回顶楼 | |
发表时间:2007-02-08
jamesby 写道 男儿当 写道 路过!多一句嘴.我以前好像有过一次是这样,记得好像清空了一次浏览器的临时文件和cookie.不知道你是不是这种情况. 清了好多次了,关键是好几台机器对服务器的访问都不正常.
大家使用Spring MVC都是如何处理用户登录的,能否贴段用户登录的代码上来? 我这样使用Spring是否正确,希望能多给点建议. 明天写一个Session 的Listener监测下Session的创建和销毁的情况,希望能有所收获,马上要上线了,出了这个莫名其妙的问题.哎... ... 和server端没有太大的关系 浏览器什么类型?版本?安全设置如何?有没有禁用cookie? 把浏览器安全级别先都降到最低看看 |
|
返回顶楼 | |
发表时间:2007-02-08
pikachu 写道 jamesby 写道 男儿当 写道 路过!多一句嘴.我以前好像有过一次是这样,记得好像清空了一次浏览器的临时文件和cookie.不知道你是不是这种情况. 清了好多次了,关键是好几台机器对服务器的访问都不正常.
大家使用Spring MVC都是如何处理用户登录的,能否贴段用户登录的代码上来? 我这样使用Spring是否正确,希望能多给点建议. 明天写一个Session 的Listener监测下Session的创建和销毁的情况,希望能有所收获,马上要上线了,出了这个莫名其妙的问题.哎... ... 和server端没有太大的关系 浏览器什么类型?版本?安全设置如何?有没有禁用cookie? 把浏览器安全级别先都降到最低看看 关键是服务器也部署另外一个web应用,而且无论通过hostname还是IP访问该应用都没有这个问题! 我先前也怀疑浏览器的问题!但是访问同一台机器的其它应用就可以这没有道理啊. 而且也不可能那么多的机器的浏览器都有问题,我测试了三太机器访问,都出现这种现象,app server为weblogic 8.1.3! |
|
返回顶楼 | |
发表时间:2007-02-09
问题原因找到了,我的首页有这样一段动态生成图片的代码
<img src="http://192.168.1.143/site/bigpic/drawPicture.jsp" width="138" height="94" border=0>导致session冲突,服务每次被访问都会新建立session对象,具体为什么会冲突稍后再好好总结一下,感谢各位的答复,多谢! |
|
返回顶楼 | |
发表时间:2007-02-09
在本机看到如下Cookies内容:
Name Internet Address cm/ Cookie:机器名@192.168.1.143/cm cm/ Cookie:机器名@服务器名/cm site/ Cookie:机器名@192.168.1.143/site site/ Cookie:机器名@服务器名/site 浏览器应该根据Internet Address来发送相应的Cookie文件的内容吧,如果是这样,那为什么我的cm应用首页中引用了一个site应用的动态图片就出现session冲突的情况呢? 正常情况应该是浏览器将Internet Address为Cookie:机器名@192.168.1.143/cm的Cookie文件内容发送到我的cm应用,登录到首页访问site的动态图片,则发送Internet Address为“Cookie:机器名@192.168.1.143/site”给我的site应用(不是cm应用)。 不过现在感觉是浏览器错误的将Internet Address为“Cookie:机器名@192.168.1.143/site”发送给了我的cm应用。 浏览器发送Cookie的机制是什么?当然问题是解决了,但是原理没有搞懂! |
|
返回顶楼 | |