当前位置: 代码网 > it编程>编程语言>Java > SpringSecurity实现踢出指定用户的示例

SpringSecurity实现踢出指定用户的示例

2025年03月01日 Java 我要评论
springsecurity中可以使用 sessionregistry 的实现类 sessionregistryimpl 来获取session相关信息,可以通过这个实现类来踢出用户。springsec

springsecurity中可以使用 sessionregistry 的实现类 sessionregistryimpl 来获取session相关信息,可以通过这个实现类来踢出用户。

springsecurity配置

@enablewebsecurity
public class securityconfig extends websecurityconfigureradapter {
    @autowired
    isysuserservice userservice;
    @override
    protected void configure(httpsecurity http) throws exception {
        http.authorizerequests()
                .antmatchers("/webjars/**","/asserts/**","/login").permitall()
                .anyrequest().authenticated()
                .and()
                .formlogin()
                .loginpage("/login")
                .loginprocessingurl("/loginpost")
                .failureurl("/login?error=true")
                .defaultsuccessurl("/index")
                .and()
                .logout()
                .logouturl("/logout")
                .addlogouthandler(new mylogouthandler())
                .logoutsuccessurl("/login")
                .and()
                .rememberme()
                .userdetailsservice(userservice)
                .tokenrepository(jdbctokenrepository())
                //保存登录状态时间,单位是秒
                .tokenvalidityseconds(60*60*3)
                .and()
                //关闭请求头中的frame选项,不限制iframe
                .headers().frameoptions().disable()
                //关闭跨域
                .and().csrf().disable()
                .sessionmanagement()
                //无效session跳转
                .invalidsessionurl("/login")
                //同时登陆多个只保留一个
                .maximumsessions(1)
                //过期session跳转
                .expiredurl("/login")
                .sessionregistry(sessionregistry());
    }
    /** 注册sessionregistry*/
    @bean
    public sessionregistry sessionregistry(){
        return new sessionregistryimpl();
   	}

控制器

/** 踢出用户 */
    @preauthorize("hasrole('管理员')")
    @getmapping("/logout/{id}")
    @responsebody
    public string logout(@pathvariable long id) throws nosuchfieldexception {
    	//通过id查询用户
        sysuser sysuser = userservice.selectuserbyuserid(id);
        //获取所有principal信息
        list<object> allprincipals = sessionregistry.getallprincipals();
        for (object allprincipal : allprincipals) {
            user user=(user)allprincipal;
            //判断是否跟传递的id所找到的用户登录名一致
            if(user.getusername().equals(sysuser.getloginname())){
                list<sessioninformation> allsessions = sessionregistry.getallsessions(allprincipal, false);
                for (sessioninformation session : allsessions) {
                	//使当前session过期
                    session.expirenow();
                }
            }
        }
        return "ok";
    }

到此这篇关于springsecurity踢出指定用户的文章就介绍到这了,更多相关springsecurity踢出指定用户内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com