栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java > SpringBoot

Spring Security 强制退出指定用户

SpringBoot 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Security 强制退出指定用户

应用场景

最近社区总有人发文章带上小广告,严重影响社区氛围,好气!对于这种类型的用户,就该永久拉黑!

社区的安全框架使用了 spring-security 和 spring-session,登录状态 30 天有效,session 信息是存在 redis 中,如何优雅地处理这些不老实的用户呢?

首先,简单划分下用户的权限:

  • 管理员(ROLE_MANAGER):基本操作 + 管理操作

  • 普通用户(ROLE_USER):基本操作

  • 拉黑用户(ROLE_BLACK):不允许登录

然后,拉黑指定用户(ROLE_USER -> ROLE_BLACK),再强制该用户退出即可(删除该用户在 redis 中 session 信息)。

项目相关依赖及配置

Maven 依赖

        
        
            org.springframework.boot
            spring-boot-starter-security
        

        
        
            org.springframework.boot
            spring-boot-starter-data-redis
        

        
        
            org.springframework.session
            spring-session-data-redis
        

Spring Session 策略配置 application.yml

# 此处省略 redis 连接相关配置spring:
  session:
    store-type: redis

Spring Security 配置代码示例

@EnableWebSecuritypublic class WebSecurityConfig extends WebSecurityConfigurerAdapter {    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/user
    @PreAuthorize("hasRole('MANAGER')")    @GetMapping("/manager/logout/{userId}")    public ResponseBean data(@PathVariable() Long userId){        // 查询 PrincipalNameIndexName(Redis 用户信息的 key),结合自身业务逻辑来实现
        String indexName = userService.getPrincipalNameIndexName(userId);        // 查询用户的 Session 信息,返回值 key 为 sessionId
        Map userSessions = sessionRepository.findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, indexName);        // 移除用户的 session 信息
        List sessionIds = new ArrayList<>(userSessions.keySet());        for (String session : sessionIds) {
            redisOperationsSessionRepository.deleteById(session);
        }        return ResponseBean.success(userSessions);
    }

}

说明 indexName 为  Principal.getName()  的返回值。

相关文档
  • Spring Session With Redis


作者:Anoyi
链接:https://www.jianshu.com/p/7766e0b9d98f


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/235470.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号