# springboot2-springsession-redis
**Repository Path**: knowz/springboot2-springsession-redis
## Basic Information
- **Project Name**: springboot2-springsession-redis
- **Description**: springboot2 整合redis实现spring session的共享
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 1
- **Created**: 2018-04-18
- **Last Updated**: 2023-11-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# springboot2-springsession-redis
springboot2 整合redis实现spring session的共享
Spring Session的特性包括但不限于以下:
- 使用GemFire来构建C/S架构的httpSession(不关注)
- **使用第三方仓储来实现集群session管理,也就是常说的分布式session容器,替换应用容器(如tomcat的session容器)。仓储的实现,Spring Session提供了三个实现(redis,mongodb,jdbc),其中redis使我们最常用的。程序的实现,使用AOP技术,几乎可以做到透明化地替换。(核心)**
- 可以非常方便的扩展Cookie和自定义Session相关的Listener,Filter。
- 可以很方便的与Spring Security集成,增加诸如findSessionsByUserName,rememberMe,限制同一个账号可以同时在线的Session数(如设置成1,即可达到把前一次登录顶掉的效果)等等
### 1.在pom.xml文件中导入需要的依赖
```
org.springframework.boot
spring-boot-starter-security
org.springframework.boot
spring-boot-starter-data-redis
org.springframework.session
spring-session-data-redis
2.0.0.RELEASE
```
### 2.在application.yml文件中配置redis
```
spring:
redis:
host: localhost
port: 6379
database: 1
```
### 3.配置类开启redis http session
```
@Configuration
@EnableRedisHttpSession
public class SessionConfig {
}
```
### 4.配置 spring security
```
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/resources/**").permitAll()
.anyRequest().authenticated()
.and()
.httpBasic()
.and()
.logout().permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin").password("{noop}123456").roles("USER");
}
}
```
### 5.编写controller类
```
@RestController
public class SessionController {
@GetMapping("/test/session")
public String testSession(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
String brower = (String) session.getAttribute("brower");
if (brower == null) {
System.out.println("session 中不存在brower,设置 brower=" + request.getParameter("brower"));
session.setAttribute("brower", request.getParameter("brower"));
} else {
System.out.println("session 中存在 brower=" + brower);
}
Cookie[] cookies = request.getCookies();
if(cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
// cookie.setDomain(".yourAddress.com");
System.out.println("cookie: " + cookie.getName() + ": " + cookie.getValue());
}
}
return "success";
}
@Autowired
FindByIndexNameSessionRepository sessionRepository;
@GetMapping("/test/findByUsername")
public Map findByUsername(@RequestParam String username) {
Map usersSessions = sessionRepository.findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, username);
return usersSessions;
}
}
```