文档章节

Spring-Security3中的RememberMe功能的引入 RememberMe的功

于忠达
 于忠达
发布于 2014/06/12 18:20
字数 823
阅读 109
收藏 0
点赞 0
评论 0

Spring-Security3中的RememberMe功能的引入

 

RememberMe的功能实现有三种,这里只讲TokenBasedRememberMeServices的实现方案配置。

 

1. Authentication-Manager配置中加上erase-credentials="false"这个属性配置。

不过阅读源码的时候发现如果没有也不要紧,只是会去读数据库,重新获得用户的密码而已。但从整个过程来看,好像也没并没有多读一次数据库。这部分代码的理顺就不包含在这里了。只要知道一点就好:这个配置不是必要的。

    <authentication-manager erase-credentials="false"

 

2. http中加上remember-me的配置

这个配置在logoutanonymous之前即可。

里面有几个属性配置:

user-service-ref指向authentication-manager里面provider当中配置的user-service-ref即可。用来获取用户的时候用。

token-validity-seconds:这个不用解释了吧,就是记住用户多长时间。我不知道怎样可以实现动态的记住,比如用户可选一天/一周/一月/一年等。单位是秒。

authentication-success-handler-ref:这个是认证通过之后的后续处理。如果不需要,这个可以不配置。我是需要的。

       <sec:remember-me

              user-service-ref="userService"

              token-validity-seconds="2592000"

              authentication-success-handler-ref="loginSuccessHandler"/>

 

3. 前端页面

前端页面的登录表单里面增加一个记住我的复选框即可。字段的值可以是true/on/1等多种表达确定使用该功能的方式。

<input name="_spring_security_remember_me" type="checkbox" value="true"/>

 

OK了。这样的配置已经完美的引入了RememberMe功能了。不过由于这个方案使用的是内存存储方式,TokenBasedRememberMeServices把已经登录的人员信息放在内存里,因此关机之后就不能用了。如果要使用持久化到数据库,需要另行配置,方式也差不多。

 

另外的实现方案包括配置data-source-reftoken-repository-ref两种,分别使用JdbcTokenRepositoryImplPersistentTokenBasedRememberServices来实现,并且这两个不能同时配置,都不用的话就用TokenBasedRememberMeServices来进行配置。这两种实现方案暂时没有研究。

 

---------------------------------------------

 

如果采用自己定义httpentry-point的话,即实现了自己的登录方式,比如添加了验证码的校验,这时候加入RememberMe的配置稍微有点不一样。

1. Authentication-Manager配置中加上erase-credentials="false"这个属性配置。

这个配置和前面的一样,可以不配置,照样工作很好。我也是参照别人的配置进行的,后来自己读源码发现不需要这个配置。

2. http中加上remember-me的配置

这个配置基本上不变,但需要添加一个属性,开放出所配置的RememberMeServices来。因为开放的这个Bean要被配置在别的地方

    <sec:remember-me

       services-alias="tokenBasedRememberMeServices"

       user-service-ref="userService"

       token-validity-seconds="2592000"

       authentication-success-handler-ref="loginSuccessHandler"/>

 

3. 自定义登录的AuthenticationProcessingFilter中添加对RememberMeServices的引用

对我来说,这个地方的代码应该是这个样子的:

    <bean id="captchaAuthenticationFilter"

       class="com.xx.CaptchaUsernamePasswordAuthenticationFilter">

       <property name="authenticationFailureHandler"

            ref="loginFailureHandler" />

       <property name="authenticationSuccessHandler"

            ref="loginSuccessHandler" />

       <property name="authenticationManager"

            ref="authenticationManager" />

       <property name="rememberMeServices"

            ref="tokenBasedRememberMeServices" />

       <property name="filterProcessesUrl"

            value="/workspace/dologin" />

       <property name="authCode" ref="authCode" />

    </bean>

 

4. 前端页面

前端页面跟前面是一样的。

 

OK了,就这样。


© 著作权归作者所有

共有 人打赏支持
于忠达
粉丝 112
博文 13
码字总数 16484
作品 0
青岛
程序员
一步一步教你用shiro——1引入shiro框架

一步一步教你用shiro——1引入shiro框架 一步一步教你用shiro——2配置并自定义realm 一步一步教你用shiro——3配置并自定义sessionManager 一步一步教你用shiro——4配置并自定义sessionDa...

肥肥小浣熊 ⋅ 04/30 ⋅ 0

第十三章 RememberMe——《跟我学Shiro》

目录贴: 跟我学Shiro目录贴 Shiro提供了记住我(RememberMe)的功能,比如访问如淘宝等一些网站时,关闭了浏览器下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问,基本流程如下...

Zero零_度 ⋅ 2016/03/21 ⋅ 0

Spring Seucrity 之 Remember Me

Spring Security 提供了Remember-me机制用来实现记录用户的登录状态。方便用户下 次自动登录。Spring Security 对此操作提供了必要的钩子,remember-me有两个固定的实现 一个是使用把用户登录...

枫叶飘零 ⋅ 2013/08/08 ⋅ 0

Shiro之授权管理与授权的三种方式(1、编程方式,2、注解方式,3、jsp标签)-yellowcong

授权管理,三种方式,其中注解和jsp的方式在开发中用得比较的多,但是对于编程的方式完成注解,在实际开发中,用得不是特别多。这一节,讲解shiro如何完成授权的,授权操作,需要在Reaml中,...

yelllowcong ⋅ 2017/12/20 ⋅ 0

SpringBoot集成Spring Security(2)——自动登录

在上一章:SpringBoot集成Spring Security(1)——入门程序中,我们实现了入门程序,本篇为该程序加上自动登录的功能。 源码地址:https://github.com/jitwxs/blogsample Step1 修改login.h...

yuanlaijike ⋅ 05/09 ⋅ 0

jsp里面一行代码不懂

${rememberMe ? 'checked' : ''}谁能解释下这种用法及功能

enjoyoschina ⋅ 2016/08/03 ⋅ 8

Shiro的 rememberMe 功能使用指导(为什么rememberMe设置了没作用?)

问题 shiro中提供了rememberMe功能,它用起来是这样的 [java] view plaincopy UsernamePasswordToken token = new UsernamePasswordToken(loginForm.getUsername(),loginForm.getPassword())......

Jerry- ⋅ 2015/05/27 ⋅ 1

shiro 使用中取得用户登录名称的问题

在使用shiro过程中配置了rememberme功能 在页面中使用就取不到登录名称了 ,不设置rememberme就可以 在线等待大神解答

灯光下的宁静 ⋅ 2014/11/11 ⋅ 1

SpringMVC +shrio 不执行userRealm方法??求解

配置文件如下:

咖啡加糖 ⋅ 2017/01/04 ⋅ 1

《Spring Security3》第四章第四部分翻译(Remember me后台存储和SSL)

将Remember me功能迁移至数据库 现在你可能会意识到我们remember me功能的实现,能够在应用重启前很好的使用,但在应用重启时用户的session会被丢失。这对用户来说会不太便利,他们不应该关心...

heroShane ⋅ 2014/02/08 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

容器之重命名镜像

使用docker tag命令来重命名镜像名称,先执行help,查看如何使用如下 mjduan@mjduandeMacBook-Pro:~/Docker % docker tag --helpUsage:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TA...

汉斯-冯-拉特 ⋅ 7分钟前 ⋅ 0

with 的高级用法

那么 上下文管理器 又是什么呢? 上下文管理器协议包含 __enter__ 和 __exit__ 两个方法。with 语句开始运行时,会在上下文管理器对象上调用 __enter__ 方法。with 语句运行结束后,会在上下...

阿豪boy ⋅ 26分钟前 ⋅ 0

使用 jsoup 模拟登录 urp 教务系统

需要的 jsoup 相关 jar包:https://www.lanzous.com/i1abckj 1、首先打开教务系统的登录页面,F12 开启浏览器调试,注意一下 Request Headers 一栏的 Cookie 选项,我们一会需要拿这个 Cook...

大灰狼时间 ⋅ 26分钟前 ⋅ 0

关于线程的创建

转自自己的笔记: http://note.youdao.com/noteshare?id=87584d4874acdeaf4aa027bdc9cb7324&sub=B49E8956E145476191C3FD1E4AB40DFA 1.创建线程的方法 Java使用Thread类代表线程,所有的线程对......

MarinJ_Shao ⋅ 38分钟前 ⋅ 0

工厂模式学习

1. 参考资料 工厂模式-伯乐在线 三种工厂-思否 深入理解工厂模式 2. 知识点理解 2.1 java三种工厂 简单工厂 工厂模式 抽象工厂 2.2 异同点 逐级复杂 简单工厂通过构造时传入的标识来生产产品...

liuyan_lc ⋅ 50分钟前 ⋅ 0

Java NIO

1.目录 Java IO的历史 Java NIO之Channel Java NIO之Buffer Java NIO之Selector Java NIO之文件处理 Java NIO之Charset Java 可扩展IO 2.简介 “IO的历史”讲述了Java IO API从开始到现在的发...

士别三日 ⋅ 54分钟前 ⋅ 0

[Err] ORA-24344: success with compilation error

从txt文本复制出创建function的脚本,直接执行,然后报错:[Err] ORA-24344: success with compilation error。 突然发现脚本的关键字,居然不是高亮显示。 然后我把脚本前面的空格去掉,执行...

wenzhizhon ⋅ 今天 ⋅ 0

Spring Security授权过程

前言 本文是接上一章Spring Security认证过程进一步分析Spring Security用户名密码登录授权是如何实现得; 类图 调试过程 使用debug方式启动https://github.com/longfeizheng/logback该项目,...

hutaishi ⋅ 今天 ⋅ 0

HAProxy基于KeepAlived实现Web高可用及动静分离

前言 软件负载均衡一般通过两种方式来实现: 基于操作系统的软负载实现 基于第三方应用的软负载实现 LVS是基于Linux操作系统实现的一种软负载,而HAProxy则是基于第三方应用实现的软负载。 ...

寰宇01 ⋅ 今天 ⋅ 0

微软自研处理器的小动作:已经开始移植其他平台的工具链

微软将 Windows 10 、Linux 以及工具链如 C/C++ 和 .NET Core 运行时库、Visual C++ 2017 命令行工具、RyuJIT 编辑器等移植到其自主研发的处理器架构 E2。微软还移植了广泛使用的 LLVM C/C++...

linux-tao ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部