Spring Session - Spring Boot
|
The completed guide can be found in the boot sample application. |
Updating
Dependencies
Before you use Spring Session, you must ensure to update your dependencies. We assume you are working with a working Spring Boot web application. If you are using Maven, ensure to add the following dependencies:
<dependencies>
<!-- ... -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
<version>1.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
</dependencies>
Spring
Configuration
After adding the required dependencies, we can create our Spring configuration. The Spring configuration is responsible for creating a Servlet Filter that replaces the HttpSession implementation
with an implementation backed by Spring Session. Add the following Spring Configuration:
@EnableRedisHttpSession
public class HttpSessionConfig { }
The @EnableRedisHttpSession annotation createsa Spring Bean with the name of springSessionRepositoryFilterthatimplements Filter. The filter is what is in charge of replacing the HttpSession implementationto be backed by Spring Session. In this instance Spring Session is backed by Redis. |
Configuring
the Redis Connection
Spring Boot automatically creates a RedisConnectionFactory that
connects Spring Session to a Redis Server on localhost on port 6379 (default port). In a production environment you need to ensure to update your configuration to point to your Redis server. For example, you can include the following in your application.properties
spring.redis.host=localhost
spring.redis.password=secret
spring.redis.port=6379
For more information, refer to Connecting
to Redis portion of the Spring Boot documentation.
Servlet
Container Initialization
Our Spring Configuration created
a Spring Bean named springSessionRepositoryFilter that
implements Filter. The springSessionRepositoryFilter bean
is responsible for replacing the HttpSession with
a custom implementation that is backed by Spring Session.
In order for our Filter to do its magic,
Spring needs to load our Config class. Last
we need to ensure that our Servlet Container (i.e. Tomcat) uses our springSessionRepositoryFilter for
every request. Fortunately, Spring Boot takes care of both of these steps for us.
boot
Sample Application
The boot Sample Application demonstrates how to use Spring Session to transparently leverage Redis to back a web application’s HttpSession when
using Spring Boot.
Running
the boot Sample Application
You can run the sample by obtaining the source code and invoking
the following command:
|
For the sample to work, you must install Redis 2.8+ on localhost and run it with the default port (6379). Alternatively, |
$ ./gradlew :samples:boot:bootRun
You should now be able to access the application at http://localhost:8080/
Exploring
the security Sample Application
Try using the application. Enter the following to log in:
Username user
Password password
Now click the Login button. You should now see a message indicating your are logged in with the user entered previously. The user’s information is stored in Redis rather than Tomcat’s HttpSession implementation.
How
does it work?
Instead of using Tomcat’s HttpSession, we
are actually persisting the values in Redis. Spring Session replaces theHttpSession with
an implementation that is backed by Redis. When Spring Security’sSecurityContextPersistenceFilter saves
the SecurityContext to the HttpSession it
is then persisted into Redis.
When a new HttpSession is created, Spring
Session creates a cookie named SESSION in your browser that contains the id of your session. Go ahead and view the cookies (click for help with Chrome or Firefox).
If you like, you can easily remove the session using redis-cli. For example, on a Linux based system you can type:
$ redis-cli keys '*' | xargs redis-cli del
| The Redis documentation has instructions for installing redis-cli. |
Alternatively, you can also delete the explicit key. Enter the following into your terminal ensuring to replace 7e8383a4-082c-4ffe-a4bc-c40fd3363c5e with
the value of your SESSION cookie:
$ redis-cli del spring:session:sessions:7e8383a4-082c-4ffe-a4bc-c40fd3363c5e
Now visit the application at http://localhost:8080/ and observe that we are no longer authenticated.
Spring Session - Spring Boot的更多相关文章
- 别再让你的微服务裸奔了,基于 Spring Session & Spring Security 微服务权限控制
微服务架构 网关:路由用户请求到指定服务,转发前端 Cookie 中包含的 Session 信息: 用户服务:用户登录认证(Authentication),用户授权(Authority),用户管理(R ...
- 使用Spring Session实现Spring Boot水平扩展
小编说:本文使用Spring Session实现了Spring Boot水平扩展,每个Spring Boot应用与其他水平扩展的Spring Boot一样,都能处理用户请求.如果宕机,Nginx会将请 ...
- SpringBoot2 使用Spring Session集群
有几种办法: 1.扩展指定server利用Servlet容器提供的插件功能,自定义HttpSession的创建和管理策略,并通过配置的方式替换掉默认的策略.缺点:耦合Tomcat/Jetty等Serv ...
- 通过Spring Session实现新一代的Session管理
长期以来,session管理就是企业级Java中的一部分,以致于我们潜意识就认为它是已经解决的问题,在最近的记忆中,我们没有看到这个领域有很大的革新. 但是,现代的趋势是微服务以及可水平扩展的原生云应 ...
- 转:通过Spring Session实现新一代的Session管理
长期以来,session管理就是企业级Java中的一部分,以致于我们潜意识就认为它是已经解决的问题,在最近的记忆中,我们没有看到这个领域有很大的革新. 但是,现代的趋势是微服务以及可水平扩展的原生云应 ...
- 通过 Spring Session 实现新一代的 Session 管理
长期以来,session 管理就是企业级 Java 中的一部分,以致于我们潜意识就认为它是已经解决的问题,在最近的记忆中,我们没有看到这个领域有很大的革新. 但是,现代的趋势是微服务以及可水平扩展的原 ...
- 基于Spring Boot/Spring Session/Redis的分布式Session共享解决方案
分布式Web网站一般都会碰到集群session共享问题,之前也做过一些Spring3的项目,当时解决这个问题做过两种方案,一是利用nginx,session交给nginx控制,但是这个需要额外工作较多 ...
- Spring boot配合Spring session(redis)遇到的错误
背景:本MUEAS项目,一开始的时候,是没有引入redis的,考虑到后期性能的问题而引入.之前没有引用redis的时候,用户登录是正常的.但是,在加入redis支持后,登录就出错!错误如下: . __ ...
- Spring boot集成spring session实现session共享
最近使用spring boot开发一个系统,nginx做负载均衡分发请求到多个tomcat,此时访问页面会把请求分发到不同的服务器,session是存在服务器端,如果首次访问被分发到A服务器,那么se ...
随机推荐
- excel unixtime与北京时间互转
unixtime转北京时间,在单元格内输入:=INT((B2-70*365-19)*86400-8*3600) *.要设置一下单元格格式为y-m-d h:m:s才会正确显示 北京时间转unixti ...
- 【STL__set_的应用】
1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器, 更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结 ...
- dotnet tools 运行 dotnet run
dotnet tools 运行 dotnet run dotnet run 命令介绍 前言 本篇主要介绍 asp.net core 中,使用 dotnet tools 运行 dotnet run 之后 ...
- Centos6.5搭建bugzilla
一.安装httpd. mod_ssl. mysql-server . mysql .php-mysql . gcc . perl* . mod-perl-devel [root@localhost ~ ...
- Net::OpenSSH 使用例子
[root@dr-mysql01 mojo]# cat a1.pl use Net::OpenSSH; my $host = '121.4xx.xx1.41'; my $user = 'root'; ...
- word2vec 中的数学原理具体解释(三)背景知识
word2vec 是 Google 于 2013 年开源推出的一个用于获取 word vector 的工具包,它简单.高效,因此引起了非常多人的关注.因为 word2vec 的作者 Tomas M ...
- 2014 International Conference on Robotics and Computer Vision (ICRVC 2014)
2014机器人与计算机视觉国际会议ICRVC 与会地点:北京 与会时间:2014.10.24-26 截稿日期:2014-07-10 关于征稿: 语言:英文 主题: • Evolutionary Rob ...
- PL/SQL连64位Oracle11g R2 win7 64旗舰环境
说明:使用的软件版本是PL/SQL Developer 7.0.1,Oracle服务器端安装在Windows7旗舰版上. 以下是我的步骤 1,先到Oracle网站下载客户端:http://www.or ...
- BZOJ 3373: [Usaco2004 Mar]Lying Livestock 说谎的牲畜( 差分约束 )
枚举每头牛, 假设它在说谎, 建图判圈就行了...为啥水题都没人来写.. --------------------------------------------------------------- ...
- inet_addr() inet_ntoa() inet_pton inet_ntop sockaddr_in
inet_addr() 简述:将一个点间隔地址转换成一个in_addr.#include <winsock.h>unsigned long PASCAL FAR inet_addr( co ...