1. 程式人生 > >SpringSecurity(十)強制退出指定使用者

SpringSecurity(十)強制退出指定使用者

使用場景

假設使用者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