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

猜你喜欢

转载自blog.csdn.net/lizc_lizc/article/details/84141144