- 浏览: 383458 次
- 性别:
文章分类
最新评论
-
wjw103:
You are using old notation for ...
Struts2 入门实例代码 -
hhb19900618:
你好 你这个工程压缩包是不是有问题啊?根本不能导入?
Struts2 入门实例代码 -
it爱:
[list][*]dsadsa[*]dsadsa[*]dsad ...
Spring AOP 学习小结 -
youjianbo_han_87:
和 weblogic 有个毛线关系???????
Weblogic下的自动任务 -
hua839:
是用SmartUpload进行文件上传
最近开发一个新项目采用Spring MVC+Spring+iBatis结构,出现了一个奇怪的现象,通过计算机名称可以正常访问,并且一切正常。而通过IP访问则会出现一个奇怪的现象:
登录系统后随便点哪个链接都会退出系统。下面贴出我的部分代码:
配置文件
登录代码
拦截器代码
因为我在拦截器中配置session失效则自动到首页。
在login.jsp页面写如下代码:
打印出的结果如下:
只贴出了JSESSIONID的部分,我奇怪的是为什么浏览器会发送不同的JSESSIONID.
而通过计算机名称访问则没有任何问题。另外在本机部署一个老的应用用Struts开发,无论通过IP还是计算机名访问都无问题,第一次碰到这种问题,束手无策,另外声明我在web.xml中没有进行任何有关session的配置。
大家使用Spring MVC都是如何处理用户登录的,能否贴段用户登录的代码上来?
我这样使用Spring是否正确,希望能多给点建议.
明天写一个Session 的Listener监测下Session的创建和销毁的情况,希望能有所收获,马上要上线了,出了这个莫名其妙的问题.哎... ...
和server端没有太大的关系
浏览器什么类型?版本?安全设置如何?有没有禁用cookie?
把浏览器安全级别先都降到最低看看浏览器IE6.0,安全设置都是默认设置,没有禁用cookies.
关键是服务器也部署另外一个web应用,而且无论通过hostname还是IP访问该应用都没有这个问题!
我先前也怀疑浏览器的问题!但是访问同一台机器的其它应用就可以这没有道理啊.
而且也不可能那么多的机器的浏览器都有问题,我测试了三太机器访问,都出现这种现象,app server为weblogic 8.1.3!
大家使用Spring MVC都是如何处理用户登录的,能否贴段用户登录的代码上来?
我这样使用Spring是否正确,希望能多给点建议.
明天写一个Session 的Listener监测下Session的创建和销毁的情况,希望能有所收获,马上要上线了,出了这个莫名其妙的问题.哎... ...
和server端没有太大的关系
浏览器什么类型?版本?安全设置如何?有没有禁用cookie?
把浏览器安全级别先都降到最低看看
大家使用Spring MVC都是如何处理用户登录的,能否贴段用户登录的代码上来?
我这样使用Spring是否正确,希望能多给点建议.
明天写一个Session 的Listener监测下Session的创建和销毁的情况,希望能有所收获,马上要上线了,出了这个莫名其妙的问题.哎... ...
建议楼主去掉以上的代码再试试看这个只是用户成功登录后将用户名保存到cookie中,以后用户访问系统不需要输入用户名,我的那个用struts写的程序也有这段代码,我是拷贝过来的!
现在不能试验,明早上班试验下,另外我测试过将securityInterceptor去掉,也是会有同样的问题,基本判断应该与securityInterceptor无关,晕,关键是通过http://hostname:80/cm 访问没有问题,而通过http://192.168.1.143:80 则有问题,奇怪的很!
而且通过http://192.168.1.143:80/cm 这种方式访问也不是每次都失败,不过基本5次会有4次是失败的.
建议楼主去掉以上的代码再试试看
登录系统后随便点哪个链接都会退出系统。下面贴出我的部分代码:
配置文件
<?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的配置。
评论
8 楼
jamesby
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的机制是什么?当然问题是解决了,但是原理没有搞懂!
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的机制是什么?当然问题是解决了,但是原理没有搞懂!
7 楼
jamesby
2007-02-09
问题原因找到了,我的首页有这样一段动态生成图片的代码
<img src="http://192.168.1.143/site/bigpic/drawPicture.jsp" width="138" height="94" border=0>导致session冲突,服务每次被访问都会新建立session对象,具体为什么会冲突稍后再好好总结一下,感谢各位的答复,多谢!
6 楼
jamesby
2007-02-08
pikachu 写道
jamesby 写道
男儿当 写道
路过!多一句嘴.我以前好像有过一次是这样,记得好像清空了一次浏览器的临时文件和cookie.不知道你是不是这种情况.
清了好多次了,关键是好几台机器对服务器的访问都不正常.
大家使用Spring MVC都是如何处理用户登录的,能否贴段用户登录的代码上来?
我这样使用Spring是否正确,希望能多给点建议.
明天写一个Session 的Listener监测下Session的创建和销毁的情况,希望能有所收获,马上要上线了,出了这个莫名其妙的问题.哎... ...
和server端没有太大的关系
浏览器什么类型?版本?安全设置如何?有没有禁用cookie?
把浏览器安全级别先都降到最低看看
关键是服务器也部署另外一个web应用,而且无论通过hostname还是IP访问该应用都没有这个问题!
我先前也怀疑浏览器的问题!但是访问同一台机器的其它应用就可以这没有道理啊.
而且也不可能那么多的机器的浏览器都有问题,我测试了三太机器访问,都出现这种现象,app server为weblogic 8.1.3!
5 楼
pikachu
2007-02-08
jamesby 写道
男儿当 写道
路过!多一句嘴.我以前好像有过一次是这样,记得好像清空了一次浏览器的临时文件和cookie.不知道你是不是这种情况.
清了好多次了,关键是好几台机器对服务器的访问都不正常.
大家使用Spring MVC都是如何处理用户登录的,能否贴段用户登录的代码上来?
我这样使用Spring是否正确,希望能多给点建议.
明天写一个Session 的Listener监测下Session的创建和销毁的情况,希望能有所收获,马上要上线了,出了这个莫名其妙的问题.哎... ...
和server端没有太大的关系
浏览器什么类型?版本?安全设置如何?有没有禁用cookie?
把浏览器安全级别先都降到最低看看
4 楼
jamesby
2007-02-08
男儿当 写道
路过!多一句嘴.我以前好像有过一次是这样,记得好像清空了一次浏览器的临时文件和cookie.不知道你是不是这种情况.
清了好多次了,关键是好几台机器对服务器的访问都不正常.
大家使用Spring MVC都是如何处理用户登录的,能否贴段用户登录的代码上来?
我这样使用Spring是否正确,希望能多给点建议.
明天写一个Session 的Listener监测下Session的创建和销毁的情况,希望能有所收获,马上要上线了,出了这个莫名其妙的问题.哎... ...
3 楼
男儿当
2007-02-08
路过!多一句嘴.我以前好像有过一次是这样,记得好像清空了一次浏览器的临时文件和cookie.不知道你是不是这种情况.
2 楼
jamesby
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次是失败的.
1 楼
magice
2007-02-08
Cookie cookie = new Cookie("username", encode(username)); cookie.setMaxAge(60 * 60 * 24 * 365); response.addCookie(cookie);
建议楼主去掉以上的代码再试试看
发表评论
-
weblogic.xml文件代码示例
2008-04-19 10:44 8887<?xml version="1.0" ... -
java 运行版本问题
2008-02-26 08:33 1824在JDK 5.0 上编译好的class,即使未用到任何5.0的 ... -
sqlserver 2000 1433 端口未打开的问题
2008-02-26 08:32 2562需要安装SqlServer 2000 SP4 -
我的一次weblogic 8升级到weblogic9遇到的问题.
2007-04-29 18:17 51501、web应用的乱码问题。 原来的基于weblogic8的应用 ... -
关于手机浏览器的问题?
2007-04-20 12:07 7349现在有一个新的需求,本来目前的基于web的软件开发已经完成,但 ... -
Weblogic下的自动任务
2007-04-03 14:13 2930package com.jamesby.listener; ... -
是用SmartUpload进行文件上传
2007-04-03 14:06 5640package com.jamesby.file.servle ... -
文件下载Servlet
2007-04-03 13:57 4349package com.jamesby.action; ... -
Java 5.0 枚举
2007-03-12 15:09 2204http://www.ibm.com/developerwor ... -
关于web-inf/classes的优先级高于web-inf/lib的优先级
2007-03-08 12:11 4835背景 一直以来都知道web-inf/classes的优先级高 ... -
深入了解WebLogic的类装载机制详解
2007-03-01 19:05 2219http://publish.it168.com/2005/1 ... -
我的一次EJB重构过程
2007-03-01 12:13 2090背景 因为历史遗留问题,代码写的杂乱无章,没有条理,而且该 ... -
如何防止用户恶意的F5刷新操作的问题?
2007-02-25 18:45 13106背景: 问题是这样的,系统持久层采用ibatis架构,系统 ... -
自己实现的TransactionManager
2007-02-23 13:53 4828背景: 目前有一个系统,系统已经写好了,但是要不停的添加新的功 ... -
关于Service和DAO层的功能划分的迷惑
2007-02-13 17:27 20693Service 层的代码 public class Gene ... -
关于Service调用Service 的思考
2007-02-10 20:04 5173以前做软件都是随便写几个Service,纯粹为了Service ... -
Tomcat 类加载机制
2007-02-08 12:04 1757yahoo中国的一个面试题,转至水木. Tomcat Ser ... -
Weblogic 8.1.3 下数据库连接池的配置问题
2007-02-07 21:00 2597weblogic8.1.3下同一个数据库连接池最好只被一个we ... -
Weblogic 8.1.3 下如何使用JSTL
2007-02-07 20:56 3184一、下载jakarta-taglibs-standard-1. ... -
两级联动Select的TAG实现
2007-02-02 18:12 2065JSP实现太复杂而且不方便,那来个幽雅点的Tag包装! pac ...
相关推荐
经了解,他对同一个项目使用tomcat部署了两个环境,一个在开发服务器上,一个在他本机,两个环境代码配置完全相同。两边通过同一个nginx进行反向代理,nginx配置大致如下, location /health/ { proxy_pass ...
3. **会话超时和销毁**:设定合理的会话超时策略,当用户长时间无操作或者在新设备登录时,服务器应强制旧的Session失效。这样可以防止未授权的设备访问已登录的账户。 4. **实时监控**:通过日志分析和实时监控,...
在Web.Config文件中配置`sessionState`元素,设置`mode`属性为`StateServer`,并指定`stateConnectionString`,这使得Session数据不在本地存储,而是通过TCP/IP连接到一个独立的State Server服务,从而避免了由于...
描述中的"nignx 进行负载后session失效的完美解决,亲测可用"进一步确认了这个问题的解决方案是有效的。 在Web应用的高并发场景下,通常会采用负载均衡技术来分发请求到多个服务器,提高系统的可用性和响应速度。...
缺点:缺乏容错性,如果当前访问的服务器发生故障,用户被转移到第二个服务器上时,他的 Session 信息都将失效。 实现方式:可以使用 Nginx 的 upstream 模块配置 ip_hash 属性来实现粘性 Session。 第二种:服务器...
`Tomcat_redis_Session共享`指的是在使用Apache Tomcat服务器时,通过Redis来实现Session的共享。这种做法在分布式系统或者微服务架构中尤为常见,因为它可以有效地解决多台服务器之间Session同步的问题。 首先,...
在多台Tomcat服务器之间进行session复制,意味着当一个用户在某台服务器上创建或更新session时,该session会被复制并分发到其他服务器,确保用户在集群中的任何一台服务器上都能访问到相同的状态信息。 1. **复制...
- **负载均衡器配置**:在负载均衡器如Nginx上,可以配置不依赖SessionID的分发策略,如IP Hash,确保同一用户请求始终被分发到同一台服务器,保证Session的一致性。 5. **安全性考虑** 尽管Redis提供了安全性,...
或者使用Cookie来保存用户信息,当检测到Session失效时,引导用户重新登录。 二、Session存储方式选择 默认情况下,ASP.NET使用In-Proc模式,即Session数据存储在Web服务器的内存中。这种方式效率高,但服务器重启...
3. **代理服务器**:使用Nginx或其他反向代理服务器,让Vue应用请求通过代理服务器转发到Spring Boot应用,这样所有请求都在同一个域下,避免跨域问题,同时Session可以正常工作。 综上所述,解决Vue+Spring Boot...
1. IP Hash:Nginx的ip_hash技术可以根据客户端IP地址的哈希值将请求路由到特定的后端服务器,从而确保来自同一IP的请求总是被发送到同一台服务器,保持session的连续性。配置ip_hash的方法是在upstream块中添加`ip_...
当用户在任一服务器上创建session时,session数据会被保存到Redis中,其他服务器可以通过连接Redis获取该用户的session信息,从而实现跨服务器的session共享,保证用户会话的连续性。 最后,Keepalived是一种为高...
SIP信令服务器通常位于公共网络上,而许多用户设备可能在私有网络后面,通过NAT进行访问。当SIP客户端(如VoIP电话或软电话)发起呼叫时,它们会向SIP服务器发送带有私有IP地址和端口号的请求。由于这些地址在公网不...
Nginx通过配置不同的负载均衡策略,如轮询、权重轮询、IP哈希等,可以有效地分配请求,避免单一服务器过载。 2. **Tomcat应用服务器**: Tomcat 是一个开源的Java Servlet容器,用于部署和运行Java Web应用程序。...
总之,通过集成Redis集群和Tomcat7,我们可以实现高效且可靠的Session共享,这对于扩展Web应用的并发处理能力、提高用户体验以及实现跨服务器的用户会话管理具有重要意义。这个过程涉及多个层面的配置和调优,但是...
可以通过访问应用并观察请求被转发到哪个服务器,以及在Memcached中查看session是否存储和更新来验证。 为了优化性能和可靠性,可以考虑以下几点: 1. 考虑使用更高级的负载均衡策略,如一致性哈希。 2. 定期检查...
首次访问时,服务器为客户端分配一个唯一的Session ID,并通过Cookie返回给客户端。之后,客户端只需要携带这个ID进行通信,服务器根据ID查找相应的Session信息。若Cookie不可用,还可以通过URL重写等方式进行会话...
在Web开发中,Iframe(内联框架)常用于嵌入其他网页内容,但涉及到跨域访问时,尤其是在处理Cookie和Session时,会遇到一些挑战。本文主要探讨如何解决Iframe跨域访问Cookie和Session的问题。 首先,理解跨域访问...
总结来说,当***应用程序目录下的文件夹或文件发生操作导致Session失效时,可以通过以上两个方面来解决。一是通过配置web.config文件中的Session状态管理方式来避免因应用程序域回收导致的Session失效问题,二是通过...