# 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; } } ```