SpringSecurity(十)強制退出指定使用者
阿新 • • 發佈:2018-11-19
使用場景
假設使用者A具有Authority1,Authority2兩個許可權,使用者A登入系統進行相關操作,而此時系統管理員需要刪除使用者A的Authority2許可權,但是需要使用者A重新登入許可權修改才會生效,如果使用者A不重新登入,那麼使用者A仍然擁有Authority2許可權。因此,系統管理員修改完使用者A的許可權後需要讓使用者A的登入資訊失效。
實現
1. 新建一個Bean
@Bean public SessionRegistry sessionRegistry() { return new SessionRegistryImpl(); }
2. 注入配置檔案
@Autowired private SessionRegistry sessionRegistry; @Override protected void configure(HttpSecurity http) throws Exception { http ...... .and() .sessionManagement() .maximumSessions(1) .sessionRegistry(sessionRegistry); }
3. 使使用者session資訊失效
@Autowired private SessionRegistry sessionRegistry; // 根據使用者清除session @GetMapping("/removeUserSessionByUsername") public Object removeUserSessionByUsername(@RequestParam String username) { List<Object> users = sessionRegistry.getAllPrincipals(); // 獲取session中所有的使用者資訊 for (Object principal : users) { if (principal instanceof LoginUser) { final LoginUser loggedUser = (LoginUser) principal; if (username.equals(loggedUser.getUsername())) { List<SessionInformation> sessionsInfo = sessionRegistry.getAllSessions(principal, false); // false代表不包含過期session if (null != sessionsInfo && sessionsInfo.size() > 0) { for (SessionInformation sessionInformation : sessionsInfo) { sessionInformation.expireNow(); } } } } } return "操作成功"; }
程式碼地址 https://github.com/923226145/SpringSecurity/tree/master/chapter10