`
Wind_ZhongGang
  • 浏览: 260023 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Spring Security 3多用户登录实现之八 基于Cookie的自动登录

阅读更多

    Spring Security为我们提供了两种方式的自动登录,一种是基于Cookie的自动登录,想实现这种自动登录功能,需要使用TokenBasedRememberMeServices类,如果想扩展自己的特殊登录,可以继承该类;一种是基于持久化存储的自动登录,需要使用PersistentTokenBasedRememberMeServices类,两者都继承了抽象类AbstractRememberMeServices,实现了RememberMeServices接口,查看RememberMeServices源代码可以发现,该接口提供了三个方法,autoLogin方法是实现自动登录功能的,loginSuccess是当第一次登录成功时,记录用户相关凭证及自动登录相关设置到Cookie或持久化存储当中的,loginFailure是当我们密码修改或Cookie过期等进行自动登录时,导致登录失败调用的,主要作用是删除相关Cookie或持久化信息的。当我们访问一个未登录却需要登录验证的资源时,RememberMeAuthenticationFilter过滤器会调用这个方法,并通过Cookie或持久化存储得到用户凭证相关信息,并通过特有的RememberMeAuthenticationToken和RememberMeAuthenticationProvider来实现类似之前的用户自己登录的流程。

 

    这里来看看如何实现基于Cookie的自动登录。

 

    1.启用RememberService服务

 <remember-me services-ref="rememberMeServices" key="ZhongGang"/>

 

    2.配置自动登录凭证存储方式

 

    <beans:bean id="rememberMeServices"
                class="org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices">
        <beans:property name="key" value="ZhongGang"/>
        <!--<beans:property name="alwaysRemember" value="true"/>-->
        <beans:property name="parameter" value="rememberMe"/>
        <beans:property name="tokenValiditySeconds" value="604800"/>
        <beans:property name="userDetailsService" ref="userService"/>
    </beans:bean>

 

    最后需要在拦截登录表单的过滤器,也就是继承或实现了AbstractAuthenticationProcessingFilter类中配置上这个rememberMeServices

 

 

    <beans:bean id="multipleAuthenticationProcessingFilter"
                class="com.template.security.filter.MultipleAuthenticationProcessingFilter">
        <beans:constructor-arg value="/login/check"/>
        <beans:property name="tokenResolvers">
            <beans:list>
                <beans:ref bean="backendAuthenticationTokenResolver"/>
                <beans:ref bean="forendAuthenticationTokenResolver"/>
            </beans:list>
        </beans:property>
        <beans:property name="authenticationManager" ref="authenticationManager"/>
        <beans:property name="authenticationSuccessHandler" ref="multipleAuthenticationSuccessHandler"/>
        <beans:property name="authenticationFailureHandler" ref="multipleAuthenticationFailureHandler"/>
        <beans:property name="rememberMeServices" ref="rememberMeServices"/>
    </beans:bean>
 
3
1
分享到:
评论
4 楼 xumin_wlt 2012-11-17  
Wind_ZhongGang 写道
xumin_wlt 写道
今天再来发现楼主的博客又更新了,看了你的文章再去看别人写的SpringSecurity容易理解多了,但是还是少了2点,过滤器里面有3个manage,这里讲了一个,加起来就完美些了。


不知道你说的3个manage是什么意思?
谢谢你的支持 共同进步



http://www.blogjava.net/fastzch/archive/2010/03/10/315028.html


    <!-- 一个自定义的filter,必须包含authenticationManager,accessDecisionManager,securityMetadataSource三个属性,
    我们的所有控制将在这三个类中实现,解释详见具体配置 -->
    <beans:bean id="myFilter" class="com.robin.erp.fwk.security.MyFilterSecurityInterceptor">
        <beans:property name="authenticationManager"
            ref="authenticationManager" />
        <beans:property name="accessDecisionManager"
            ref="myAccessDecisionManagerBean" />
        <beans:property name="securityMetadataSource"
            ref="securityMetadataSource" />
    </beans:bean>
3 楼 Wind_ZhongGang 2012-11-17  
xumin_wlt 写道
今天再来发现楼主的博客又更新了,看了你的文章再去看别人写的SpringSecurity容易理解多了,但是还是少了2点,过滤器里面有3个manage,这里讲了一个,加起来就完美些了。


不知道你说的3个manage是什么意思?
谢谢你的支持 共同进步
2 楼 xumin_wlt 2012-11-16  
期待下一个基于持久层设计的remember me功能,谢谢。
1 楼 xumin_wlt 2012-11-16  
今天再来发现楼主的博客又更新了,看了你的文章再去看别人写的SpringSecurity容易理解多了,但是还是少了2点,过滤器里面有3个manage,这里讲了一个,加起来就完美些了。

相关推荐

    SpringSecurity整合JWT.docx

    我们知道在原始的项目中我们是通过session和cookie来实现用户的识别认证。但是这样做无疑会增加服务器的压力,服务的保存了大量的数据。如果业务需要扩展,搭建了集群的话,还需要将session共享。 无状态登录 而...

    leafage-gateway:基于spring cloud网关和spring boot安全性,提供安全性,路由分配,wescoket

    整合spring security,实现了表单登录的功能,因为前一次分离分离,所以对登录的基本配置进行了一些修改,本项目中没有使用通常其他项目中使用的jwt来做,原因有:前端都是基于浏览器访问,可以使用cookie,并且实现...

    spring-security-angular

    Spring Security、Spring Boot 和 Angular JS 都有很好的特性,可以让开发现代应用程序变得非常容易,因此让它们非常顺利地协同工作可能会有很多价值。 需要考虑的事项包括 cookie、标头、本地客户端、各种安全漏洞...

    spring_security_angular

    Spring Security、Spring Boot 和 Angular JS 都有很好的特性,可以让开发现代应用程序变得非常容易,因此让它们非常顺利地协同工作可能会有很多价值。 需要考虑的事项包括 cookie、标头、本地客户端、各种安全漏洞...

    课程设计基于Java实现的校园快递代拿系统源码+sql数据库+项目详细说明.zip

    3. spring security+oauth2使用rsa加密实现认证中心(我这里没有使用io.jsonwebtoken,实际上应该使用,nacos的源码也有使用jjwt,我没使用只是为了更好的熟悉security的部分源码) 4. redis除了用作基本缓存以外,...

    医院信息系统(临床诊疗、药品管理、财务管理、患者管理)

    基于Spring cloud和Spring boot 2.x 实现 *项目演示 username:演示用户 password:test 由于没有进行部署,首次加载需要等待1~2分钟,加载完成之后比较流程流畅 好不容易抓到了推免的尾巴,所以最近打算更新...

    SpringShiro分布式缓存版

    class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"&gt; &lt;!-- end --&gt; --修改了过滤链 &lt;!-- 过滤链定义 --&gt; //简单的讲就是把需要特别处理的路径写到前面,越特殊写...

    angular-jwt-authentication:使用 JWT 进行 AngularJS 身份验证

    随着 Web 转向客户端和服务器之间更大的分离,JWT 为传统的基于 cookie 的身份验证模型提供了一个极好的替代方案。 有关 JWT 的更多信息,请访问 在本系列中,我们将构建一个简单的应用程序,以从带有 Angular ...

    asp.net知识库

    如何在DotNet 2的登录组件中检索用户的锁定状态及解锁? ASP.NET 2.0, 想说爱你不容易 SqlDataSource WEB控件:当DeleteCommandType= 遭遇 ASP.NET 2.0 只读 TextBox 回发后信息丢失的 bug asp.net2.0:扩展...

    Java源码 SpringMVC Mybatis Shiro Bootstrap Rest Webservice

    1. Springmvc + Mybatis集成、SpringSecurity权限控制、Spring AOP事务处理。 2. Wink Rest服务、Webservice服务:jaxws、CXF等 3. IO 流上传下载文件,多线程操作 4. 发送邮件,配置邮件服务器,发基于html、纯...

Global site tag (gtag.js) - Google Analytics