我现在在做一个ssh2系统,客户想让用户实现单用户登录,比如一个账号登录了,在另一台电脑上登录该账号,则之前登录的那台电脑中的用户就不能使用了(可以出现“用户已在其他地区登录”这样的说明),我的是ssh2+spring security(spring权限验证),请问这样的怎样做,谢谢。
解决方案 »
- Maven package命令后MANIFEST.MF文件内容丢失
- 什么类可以直接调用文本中的数据。
- JDBC begin failed
- spring配置文件,都已配置好,但获取的值为null,在线等
- tomcat 如何发布视频,我只会发布图片
- struts2.0起动问,请高手帮忙
- 使用Hibernate,建大表还是小表?
- 一次提交至多form
- IIS+JSP怎么配啊,我照着网上的N多的文章都试了还是不行
- java问题
- HTTP Status 500 - The absolute uri: http://jsptags.com/tags/navigation/pager can
- 正在学习java 图形界面,用记事本敲出的代码(没主函数) cmd运行不出来,求大神帮忙!
http://blog.csdn.net/chenghui0317/article/details/9373345
1.IE用户直接点右上角的x关闭网页时间怎么捕获(ALT+f4)
2.多tab浏览器,如FF/google chrome/IE8/9等关掉该TAB怎么捕获(CTRL+w)这2个问题解决不了,这个需求还是考虑怎么去跟客户解释去掉这个功能比较好。
或者自己写个浏览器,制作一个客户端,强制客户使用自己的浏览器登录,比如招行网银客户端。
你这种是可以实现的 sessionId存入数据库判断一下就OK了,
如果是一用户登录,同一用户在其他地方登录会失败是没法解决的
然后在拦截器或过滤器中比较之前的sessionId和当前的sessionId是否相同,
就能判断出该用户是否为单点登录了,如果sessionId不同,说明该用户已经在其它电脑或浏览器登录了如果是服务器集群,就会有多个application,每台服务器给同一个浏览器分配的sessionId也不相同,
application和session就不能再用了,可以使用公用的缓存服务器来解决这个问题
我们公司都用redis
<beans:constructor-arg name="sessionRegistry" ref="sessionRegistry"></beans:constructor-arg>
<beans:property name="maximumSessions" value="1"></beans:property>
<!-- 后登录的用户不能顶替前面已登录的用户
<beans:property name="exceptionIfMaximumExceeded" value="true"></beans:property>
-->
</beans:bean>maximumSessions 控制相同用户session数量 exceptionIfMaximumExceeded控制相同用户登录是否顶替已登录用户
为啥不好使呢,我再web.xml中也添加了 <listener>
<listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
为啥不好使呢,我再web.xml中也添加了 <listener>
<listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener><http use-expressions="true" entry-point-ref="loginUrlEntryPoint">
<intercept-url pattern="/common/error.jsp" filters="none"/>
<intercept-url pattern="/common/403.jsp" filters="none"/>
<intercept-url pattern="/checkCode.do" filters="none"/>
<intercept-url pattern="/noLogin.do" filters="none"/>
<intercept-url pattern="/sessionConcurrent.do" filters="none"/>
<intercept-url pattern="/login.do" filters="none"/>
<intercept-url pattern="/checkPwd.do" filters="none"/>
<intercept-url pattern="/js/**" filters="none" />
<intercept-url pattern="/css/**" filters="none" />
<intercept-url pattern="/image/**" filters="none" />
<intercept-url pattern="/*.ico" filters="none" />
<intercept-url pattern="/workflow/uploadResource.do" filters="none"/>
<intercept-url pattern="/**" access="isAuthenticated()"/>
<access-denied-handler ref="accessDeniedHandler"/>
<intercept-url pattern="/common/upload.do" filters="none"/>
<intercept-url pattern="/common/deleteAttachFile.do" filters="none"/>
<intercept-url pattern="/phone/**" filters="none"/>
<custom-filter ref="customFilter" before="FILTER_SECURITY_INTERCEPTOR"/>
<!-- 登录 -->
<custom-filter ref="loginFilter" before="FORM_LOGIN_FILTER" />
<!-- 退出 -->
<custom-filter position="LOGOUT_FILTER" ref="logoutFilter"/>
<!-- session管理 防止session并发 -->
<custom-filter ref="concurentFilter" position="CONCURRENT_SESSION_FILTER"/>
<session-management session-authentication-strategy-ref="sas"/>
</http>要把session控制添加到http标签内的
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- security session管理 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.security.web.session.HttpSessionEventPublisher
</listener-class>
</listener>
就是按照这个配置来的,还是不行。是不是要自己写代码管理session啊?
就是按照这个配置来的,还是不行。是不是要自己写代码管理session啊?
不需要写任何代码管理session。
spring security session管理需要在http标签内添加后才会有效的
你检查下http标签内有没有配置上