Session:在計算機中,尤爲是在網絡應用中,稱爲「會話控制」。Session 對象存儲特定用戶會話所需的屬性及配置信息。這樣,當用戶在應用程序的 Web 頁之間跳轉時,存儲在 Session 對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。當用戶請求來自應用程序的 Web 頁時,若是該用戶尚未會話,則 Web 服務器將自動建立一個 Session 對象。當會話過時或被放棄後,服務器將終止該會話。Session 對象最多見的一個用法就是存儲用戶的首選項。java
本文主要描述在 Spring Security
下 Session
的如下三種管理,git
Session
超時時間Session
的併發策略Session
處理application.yml
配置超時時間server:
port: 80
session:
timeout: 60
複製代碼
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失效");
}
複製代碼
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("併發登陸!");
}
}
複製代碼
當maxSessionsPreventsLogin(true)
可參考:Spring-Security和security-oauth2spring
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>1.3.1.RELEASE</version>
</dependency>
複製代碼
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
複製代碼
效果以下:json
關於更多Spring Session可參考:程序猿DD服務器
從個人 github 中下載,github.com/longfeizhen…網絡