原文: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(); }
}
  1. EnableRedisHttpSession创建了一个名为springSessionRepositoryFilter的Spring Bean来实现过滤器。这个由Spring Session实现的过滤器是负责替换HttpSession的实现。在这种情况下,Spring Session由redis支持。

  2. 然后创建了一个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的springSessionRepositoryFilterspringSecurityFilterChain之前调用非常重要,幸运的是,Spring Session提供了一个叫做AbstractHttpSessionApplicationInitializer的工具类让这件事变得超级容易。你可以按下面这么写:

文件名:Initializer.java

public class Initializer extends AbstractHttpSessionApplicationInitializer {}

类的名字(Initializer)并不重要,重要的是我们继承了AbstractHttpSessionApplicationInitializer

通过继承AbstractHttpSessionApplicationInitializer类,我们确保了springSessionRepositoryFilterspringSecurityFilterChain之前调用。

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保存SecurityContextHttpSession对象中时,他就会被持久化到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相关推荐

  1. Spring Session Management – Spring Session JDBC

    Spring Session Module provides APIs and implementation for managing user session in a web applicatio ...

  2. spring session、spring security和redis整合的简单使用

    在上一篇spring session搭配redis的简单使用文章中,我们简单的使用了spring session和redis,实现了session的外部化存储,下面我们结合spring securit ...

  3. Spring Session - 使用Spring Session从零到一构建分布式session

    文章目录 快速入门 Spring Session + Redis 官网指导 Demo pom 依赖 配置文件 配置类RedisHttpSessionConfiguration Redis中的sessi ...

  4. Spring Security——集成Spring Session、Redis和JSON序列化解决方案

    官方文档 https://docs.spring.io/spring-session/docs/2.4.2/reference/html5/#spring-security Maven 主要 < ...

  5. Re:从零开始的Spring Session(二)

    上一篇文章介绍了一些Session和Cookie的基础知识,这篇文章开始正式介绍Spring Session是如何对传统的Session进行改造的.官网这么介绍Spring Session: Spri ...

  6. datastore_使用Spring Session和JDBC DataStore进行会话管理

    datastore 在Web应用程序中,用户会话管理对于管理用户状态至关重要. 在本文中,我们将学习在集群环境中管理用户会话所采用的方法,以及如何使用Spring Session以更简单和可扩展的方式 ...

  7. 使用Spring Session和JDBC DataStore进行会话管理

    在Web应用程序中,用户会话管理对于管理用户状态至关重要. 在本文中,我们将学习在集群环境中管理用户会话所遵循的方法,以及如何使用Spring Session以更加简单和可扩展的方式实现它. 通常在生 ...

  8. 次世代的会话管理项目 Spring Session

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文来自云+社区翻译社,由Tnecesoc编译. 会话管理一直是 Java 企业级应用的重要部分.不过在很长的一段时间里,这一部分都被我们认 ...

  9. 利用spring session解决共享Session问题

    https://blog.csdn.net/patrickyoung6625/article/details/45694157 1.共享Session问题 HttpSession是通过Servlet容 ...

最新文章

  1. RxJava repeat,repeatWhen,repeatUntil 的区别
  2. 运行在CentOS7.5上的Django项目时间不正确问题
  3. 线性代数应该这样讲(一)
  4. 重磅!阿里巴巴工程师获得 containerd 社区席位,与社区共建云时代容器标准 1
  5. cfree mysql_如何配置CFree才能开发MySql数据库应用 | 学步园
  6. ​每一页都是知识点,这本Flutter企业级实践指南太绝了
  7. 实现ls -l功能 和目录实现
  8. 10 分钟实现 Spring Boot 发送邮件功能
  9. 明解C语言 入门 课后习题练习答案 第六章
  10. MQTT 测试工具介绍
  11. Android应用程序四大组件分别是什么?各个组件所起到的作用是什么?
  12. python假设检验和区间估计_用 Python 实现常用的假设检验
  13. xp 计算机配置,xp怎么查看电脑配置
  14. 邮箱正则不能超过50位_投资超50亿元的安吉景区,在悬崖顶荡秋千,超过160斤不能玩...
  15. python电子病历,如何在电子病历上安装软件包
  16. OSChina 周二乱弹 ——我FFFF……佛慈悲
  17. 科研linux发型版本,[合集]哪些Linux系统科研能用呢 - 优秀的Free OS(Linux)版 - 北大未名BBS...
  18. 功能测试的类型之用户验收测试
  19. 使用阿里云云服务器一年多的感受
  20. 哲理小故事--跳蚤人生

热门文章

  1. Android CardView 开发过程中要注意的细节
  2. MATLAB 2018a软件安装教程
  3. mysql象限和投影_Camera类之orthographic-摄像机投影模式(第100篇随笔)
  4. python sub 不区分大小写_解决Python列表字符不区分大小写的问题
  5. java类和对象实例对象_Java类、对象和实例的理解
  6. 联系人排序java代码_Android仿微信联系人按字母排序_脚本之家
  7. springboot项目打包运行
  8. 137 Single Number II 数组中除了一个数外,其他的数都出现了三次,找出这个只出现一次的数...
  9. CentOS-文件操作
  10. 关于Adapter对数据库的查询、删除操作