Session管理
本文主要描述在 Spring Security 下 Session的以下三種管理,
- Session超時時間
- Session的併發策略
- 叢集環境Session處理
Session超時
- application.yml配置超時時間
server: port: 80 session: timeout: 60 複製程式碼
- 配置MerryyouSecurityConfig
http. ...... .sessionManagement() .invalidSessionUrl("/session/invalid")//session失效跳轉的連結 ..... 複製程式碼
- Cotroller中/session/invalid
@GetMapping("/session/invalid") @ResponseStatus(code = HttpStatus.UNAUTHORIZED) public Result<String> sessionInvalid() { return ResultUtil.error(HttpStatus.UNAUTHORIZED.value(), "session失效"); } 複製程式碼
Session的併發策略
- 配置MerryyouSecurityConfig
http. ...... .maximumSessions(1)//最大session併發數量1 .maxSessionsPreventsLogin(false)//false之後登入踢掉之前登入,true則不允許之後登入 .expiredSessionStrategy(new MerryyounExpiredSessionStrategy())//登入被踢掉時的自定義操作 ..... 複製程式碼
- MerryyounExpiredSessionStrategy
@Slf4j public class MerryyounExpiredSessionStrategy implements SessionInformationExpiredStrategy { @Override public void onExpiredSessionDetected(SessionInformationExpiredEvent eventØ) throws IOException, ServletException { eventØ.getResponse().setContentType("application/json;charset=UTF-8"); eventØ.getResponse().getWriter().write("併發登入!"); } } 複製程式碼
叢集環境Session處理
新增spring-session-data-redis依賴
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>1.3.1.RELEASE</version>
</dependency>
複製程式碼
配置Spring-session儲存策略
spring:
redis:
host: localhost
port: 6379
session:
store-type: redis
複製程式碼
測試8080和8081埠分別啟動專案
java -jar spring-security.jar --server.port=8080
java -jar spring-security.jar --server.port=8081
複製程式碼
效果如下:
關於更多Spring Session可參考:程式猿DD程式碼下載
從我的 github 中下載,github.com/longfeizhen…