SpringSecurity(八)session管理
阿新 • • 發佈:2018-11-19
限制使用者最大登入數
SpringSecurityConfig
.and()
.sessionManagement()
.maximumSessions(1)
.maxSessionsPreventsLogin(false) // 當達到maximumSessions時,true表示不能踢掉前面的登入,false表示踢掉前面的使用者
.expiredSessionStrategy(new LzcExpiredSessionStrategy()) // 當達到maximumSessions時,踢掉前面登入使用者後的操作
LzcExpiredSessionStrategy
public class LzcExpiredSessionStrategy implements SessionInformationExpiredStrategy { private ObjectMapper objectMapper = new ObjectMapper(); private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy(); @Override public void onExpiredSessionDetected(SessionInformationExpiredEvent event) throws IOException, ServletException { // 這裡也可以根據需要返回html頁面或者json資料 Map<String, Object> map = new HashMap<>(); map.put("code", 0); map.put("msg", "已經另一臺機器登入,您被迫下線。" + event.getSessionInformation().getLastRequest()); event.getResponse().setContentType("application/json;charset=UTF-8"); event.getResponse().getWriter().write(objectMapper.writeValueAsString(map)); // 如果是跳轉html頁面,url代表跳轉的地址 // redirectStrategy.sendRedirect(event.getRequest(), event.getResponse(), "url"); } }
分散式session
新增依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
配置檔案
spring.redis.port=6379
spring.redis.host=127.0.0.1
spring.session.store-type=redis
程式碼地址 https://github.com/923226145/SpringSecurity/tree/master/chapter8