设为首页 收藏本站
查看: 830|回复: 0

[经验分享] 一个帐号,同时多处登陆的问题(apache security)

[复制链接]

尚未签到

发表于 2017-1-11 10:29:15 | 显示全部楼层 |阅读模式
找到的相关资料


急答:一个帐号,同时多处登陆的问题(apache security)

http://www.blogjava.net/beyondwcm/archive/2009/05/08/269545.html

定制的Spring Security(Acegi)的并发会话过滤器(ConcurrentSessionFilter)的编码过程


springsecurity扩展自定义会话管理(一)控制用户重复登陆

springsecurity有控制单账号只能在一个地方登陆的功能,后登陆用户将踢掉前登陆用户;或者限制账号重复登陆,一个账号没有退出,另外一个人想用这个账号就登陆不上

主要涉及的类如下(我自己的山寨理解):
HttpSessionEventPublisher             监听session创建和销毁
ConcurrentSessionFilter                  每次有http请求时校验,看你当前的session是否是过期的
SessionRegistryImpl                       存放session中的信息,并做处理
ConcurrentSessionControllerImpl     用户登入登出的控制
SessionInformation       存储session中信息的model

先实现springsecurity文档上的,限制用户重复登陆,后登陆用户将前登陆用户冲掉 ,只需要在xml中配置如下:
<authentication-manager alias="authenticationManager"
session-controller-ref="currentController" />
<beans:bean id="concurrentSessionFilter"   class="org.springframework.security.concurrent.ConcurrentSessionFilter">
<custom-filter position="CONCURRENT_SESSION_FILTER" />
<beans:property name="sessionRegistry" ref="sessionRegistry" />
<!-- 踢出的用户转向的页面-->
<beans:property name="expiredUrl" value="/user/user.action" />
<beans:property name="logoutHandlers">
   <beans:list>
    <beans:bean class="org.springframework.security.ui.logout.SecurityContextLogoutHandler" />
    <beans:bean
     class="org.springframework.security.ui.rememberme.TokenBasedRememberMeServices">
     <beans:property name="key" value="e37f4b31-0c45-11dd-bd0b-0800200c9a66"/>
     <beans:property name="userDetailsService" ref="userDetailsService"/>
    </beans:bean>
   </beans:list>
</beans:property>
</beans:bean>
<beans:bean id="sessionRegistry"   class="org.springframework.security.concurrent.SessionRegistryImpl" />
<beans:bean id="currentController"
class="org.springframework.security.concurrent.ConcurrentSessionControllerImpl">
<beans:property name="sessionRegistry" ref="sessionRegistry" />
<!-- true限制不允许第二个用户登录,false第二个登陆用户踢掉前一个登陆用户 -->
<beans:property name="exceptionIfMaximumExceeded" value="false" />
<!-- 等第二种情况是,允许同时多少个用户同时登陆 -->
<beans:property name="maximumSessions" value="2"/>
</beans:bean>

其中web.xml还需要添加:
<!-- 登入和登出时对SessionRegistryImpl进行处理 -->
<listener>
<listener-class>org.springframework.security.ui.session.HttpSessionEventPublisher</listener-class>
</listener>



随着业务的发展,公司部署的网站越来越多,有必要整合多个网站,采用统一的用户验证。目前想到的解决方案,主要有以下几种.
1.sso解决方案,部署独立的用户验证系统,利用cookie的保存登录ticket的基本思路,网上有很多种解决方案,有的过于复杂,需要配置很多东西,有的过于局限,只支持单一的语言。不知道各位有哪些比较好的解决方案,适合项目不是太多,配置不是太烦,支持多中语言,例如java和php等。
2.开放api,oauth验证方式,不仅适合对内项目,而且可以对外验证。感觉好像很好的,而且我们iteye论坛也有ROP等实现方式,自我感觉这种方式比较很不错.
3.统一的验证窗口,所有的登录都提交到统一的登录窗口,由其负责处理。实现最简单,不过,需要同一级域名。
不知,各位大牛们有什么比较好的意见?

个人感觉第一种比较不错,你可以采用单点登录在做到这点,一台服务器只作为验证服务器,随着项目的增多,每个项目的验证都可以使用这台验证服务器做单点登录,这也需要一个相同的登录界面,和第三种方案比较类似,不过需要注意的是,单点登录是可以跨域的(跨根域)
  对于你的第三种方案,只要js比较牛的话,应该也是可以的,淘宝的不就是这样做的吗 ?


sso一般有两种实现,基于agent和proxy。

CAS是基于agent的


XMPP 简单研究

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-326929-1-1.html 上篇帖子: org.apache.commons.digester.Digester 解析 XML文件或者流 下篇帖子: Java通过apache的common包发送email
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表