[译]Spring Session 与 Spring Security
原文:http://docs.spring.io/spring-session/docs/current-SNAPSHOT/reference/html5/guides/security.html
本指南介绍如何将Spring Session与Spring Security一起使用。它假定您已经应用Spring Security到您的应用程序。
完整的指导可以在这里找到。
更新依赖
你用Spring Session之前,你必须确保更新你的依赖。如果你正在使用Maven,确保添加以下依存关系:
文件名:pom.xml
<dependencies><!-- ... --><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId><version>1.3.0.BUILD-SNAPSHOT</version><type>pom</type></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.2.5.RELEASE</version></dependency>
</dependencies>
由于我们使用的是快照版本,我们需要确保添加Spring快照Maven仓库。确保你的pom.xml包含如下内容:
文件名:pom.xml
<repositories><!-- ... --><repository><id>spring-snapshot</id><url>https://repo.spring.io/libs-snapshot</url></repository>
</repositories>
Spring 配置
添加必需的依赖关系之后,我们就可以开始创建Spring配置。Spring配置负责创建一个Spring Session实现的Servlet过滤器来取代HttpSession
实现的过滤器。增加如下Spring配置:
@Configuration
@EnableRedisHttpSession
public class Config {@Beanpublic JedisConnectionFactory connectionFactory() {return new JedisConnectionFactory(); }
}
EnableRedisHttpSession
创建了一个名为springSessionRepositoryFilter
的Spring Bean来实现过滤器。这个由Spring Session实现的过滤器是负责替换HttpSession
的实现。在这种情况下,Spring Session由redis支持。然后创建了一个
RedisConnectionFactory
来连接Spring Session到地址是localhost,端口为6379的redis服务器。更多关于配置Spring Data Redis的信息可以参考这个文档。
Servlet Container 初始化
上面的Spring 配置创建了一个名为springSessionRepositoryFilter
的Spring Bean,为了让我们这个过滤器生效,Spring需要加载这个Config类。
由于我们的应用已经使用SecurityInitializer
来加载Spring的配置,我们可以简单地把Config类加进去:
文件名:SecurityInitializer.java
public class SecurityInitializer extends AbstractSecurityWebApplicationInitializer {public SecurityInitializer() {super(SecurityConfig.class, Config.class);}
}
最后我们需要确保Servlet Container(如Tomcat)为每一个请求用上我们的springSessionRepositoryFilter
。确保Spring Session的springSessionRepositoryFilter
在springSecurityFilterChain
之前调用非常重要,幸运的是,Spring Session提供了一个叫做AbstractHttpSessionApplicationInitializer
的工具类让这件事变得超级容易。你可以按下面这么写:
文件名:Initializer.java
public class Initializer extends AbstractHttpSessionApplicationInitializer {}
类的名字(Initializer)并不重要,重要的是我们继承了
AbstractHttpSessionApplicationInitializer
类
通过继承AbstractHttpSessionApplicationInitializer
类,我们确保了springSessionRepositoryFilter
在springSecurityFilterChain
之前调用。
Security 示例程序
运行 Security 示例程序
你可以获取源码,输入下面的命令,来运行 Security 示例程序。
为了让示例程序正常工作,你必须安装Redis 2.8+在本地(localhost),并运行在6379端口。或者,你也可以修改
JedisConnectionFactory
来指定一个Redis服务器
$ ./gradlew :samples:security:tomcatRun
现在你应该可以访问http://localhost:8080/了
访问 Security 示例程序
试着开始用这个Web应用,输入下面的用户名密码来登录:
用户名:user
密码:password
接着点击“login”按钮,你应该能够看到一个提示你已经用user登录的消息。用户的登录信息此时保存在Redis中而不是Tomcat所实现的HttpSession
中。
它是如何工作的
我们实际上是在持久化登录信息到Redis中,而不是Tomcat所实现的HttpSession
。Spring Session代替了HttpSession
,并使用Redis来存储数据:当Spring Security的SecurityContextPersistenceFilter
保存SecurityContext
到HttpSession
对象中时,他就会被持久化到Redis里。
对于Spring Security来说,当一个新的HttpSession
被创建,Spring Session生成了一个名为SESSION的cookie发送到你的浏览器,它包含了这个Session的id。你可以到浏览器中看到这个Cookie(这里有Chrome和Firefox关于Cookie的帮助)。
如果你愿意,你可以很容易用redis-cli从Redis中删掉刚才生成的Session。比如,在一个类Linux系统中你可以这么操作:
$ redis-cli keys '*' | xargs redis-cli del
Redis的文档中有说明如何安装redis-cli
或者,你也可以指定去删除某个key。例如输入下面的命令:
$ redis-cli del spring:session:sessions:7e8383a4-082c-4ffe-a4bc-c40fd3363c5e
现在访问http://localhost:8080/,你会发现刚才的登录认证已经取消了。
[译]Spring Session 与 Spring Security相关推荐
- Spring Session Management – Spring Session JDBC
Spring Session Module provides APIs and implementation for managing user session in a web applicatio ...
- spring session、spring security和redis整合的简单使用
在上一篇spring session搭配redis的简单使用文章中,我们简单的使用了spring session和redis,实现了session的外部化存储,下面我们结合spring securit ...
- Spring Session - 使用Spring Session从零到一构建分布式session
文章目录 快速入门 Spring Session + Redis 官网指导 Demo pom 依赖 配置文件 配置类RedisHttpSessionConfiguration Redis中的sessi ...
- Spring Security——集成Spring Session、Redis和JSON序列化解决方案
官方文档 https://docs.spring.io/spring-session/docs/2.4.2/reference/html5/#spring-security Maven 主要 < ...
- Re:从零开始的Spring Session(二)
上一篇文章介绍了一些Session和Cookie的基础知识,这篇文章开始正式介绍Spring Session是如何对传统的Session进行改造的.官网这么介绍Spring Session: Spri ...
- datastore_使用Spring Session和JDBC DataStore进行会话管理
datastore 在Web应用程序中,用户会话管理对于管理用户状态至关重要. 在本文中,我们将学习在集群环境中管理用户会话所采用的方法,以及如何使用Spring Session以更简单和可扩展的方式 ...
- 使用Spring Session和JDBC DataStore进行会话管理
在Web应用程序中,用户会话管理对于管理用户状态至关重要. 在本文中,我们将学习在集群环境中管理用户会话所遵循的方法,以及如何使用Spring Session以更加简单和可扩展的方式实现它. 通常在生 ...
- 次世代的会话管理项目 Spring Session
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文来自云+社区翻译社,由Tnecesoc编译. 会话管理一直是 Java 企业级应用的重要部分.不过在很长的一段时间里,这一部分都被我们认 ...
- 利用spring session解决共享Session问题
https://blog.csdn.net/patrickyoung6625/article/details/45694157 1.共享Session问题 HttpSession是通过Servlet容 ...
最新文章
- RxJava repeat,repeatWhen,repeatUntil 的区别
- 运行在CentOS7.5上的Django项目时间不正确问题
- 线性代数应该这样讲(一)
- 重磅!阿里巴巴工程师获得 containerd 社区席位,与社区共建云时代容器标准 1
- cfree mysql_如何配置CFree才能开发MySql数据库应用 | 学步园
- ​每一页都是知识点,这本Flutter企业级实践指南太绝了
- 实现ls -l功能 和目录实现
- 10 分钟实现 Spring Boot 发送邮件功能
- 明解C语言 入门 课后习题练习答案 第六章
- MQTT 测试工具介绍
- Android应用程序四大组件分别是什么?各个组件所起到的作用是什么?
- python假设检验和区间估计_用 Python 实现常用的假设检验
- xp 计算机配置,xp怎么查看电脑配置
- 邮箱正则不能超过50位_投资超50亿元的安吉景区,在悬崖顶荡秋千,超过160斤不能玩...
- python电子病历,如何在电子病历上安装软件包
- OSChina 周二乱弹 ——我FFFF……佛慈悲
- 科研linux发型版本,[合集]哪些Linux系统科研能用呢 - 优秀的Free OS(Linux)版 - 北大未名BBS...
- 功能测试的类型之用户验收测试
- 使用阿里云云服务器一年多的感受
- 哲理小故事--跳蚤人生
热门文章
- Android CardView 开发过程中要注意的细节
- MATLAB 2018a软件安装教程
- mysql象限和投影_Camera类之orthographic-摄像机投影模式(第100篇随笔)
- python sub 不区分大小写_解决Python列表字符不区分大小写的问题
- java类和对象实例对象_Java类、对象和实例的理解
- 联系人排序java代码_Android仿微信联系人按字母排序_脚本之家
- springboot项目打包运行
- 137 Single Number II 数组中除了一个数外,其他的数都出现了三次,找出这个只出现一次的数...
- CentOS-文件操作
- 关于Adapter对数据库的查询、删除操作