SpringBoot Shiro 多用户登录控制及同一浏览器登录多个账号 session相互覆盖问题

SpringBoot Shiro 多用户登录控制及同一浏览器登录多个账号 session相互覆盖问题,第1张

SpringBoot Shiro 框架实现同一个浏览只能一个账号登录

问题点:

同一个浏览器上登录多个三员账号,后登陆的会覆盖前面的session,但是前面的页面没有退出(后续请求使用的是后登录的用户的session),导致日志记录等获取的当前 *** 作主体不准确

解决:

在 login 方法中加入以下方法

  Subject subject = SecurityUtils.getSubject();
if(subject.getPrincipal()!= null){
    String msg2= "同一个浏览器同时只能一个账号登录,请退出前一个账号后再重试";
    return  ResultResponseUtil.error(msg2);
}

SpringBoot Shiro 框架同一浏览器三员先后登录打开多个页签,session 覆盖问题
问题点:

界面菜单未刷新(cookie 存储的最后一个登录的用户信息),导致界面日志查询等 *** 作的角色后台获取与前端不一致,数据展示异常

解决

Index.html 首页

function checkUserRole(){
    let username =  $("#username").val();
    setInterval(function () {
        $.ajax({
            url: "/public/checkRole",
            type: "get",
            data: {"username":$("#username").html()},
            success: function (result) {
                if (("fail" == result)) {
                    window.location.href = "/public/index";
                }
            },
            error: function (data) {
                toastr.error("网络错误,请重试", "错误提示");
            }
        })
    },5000)
};

后台接口

@GetMapping("/checkRole")
@ResponseBody
public String checkRole(HttpServletRequest request){
    String res = "fail";
    String userName =  request.getParameter("username");

    if(SecurityUtils.getSubject() !=null && SecurityUtils.getSubject().getPrincipal()!= null ){
        User user = (User)SecurityUtils.getSubject().getPrincipal();
        if(user.getUsername().equals(userName)){
            res = "suc";
        }
    }
    return res;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1322365.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-12
下一篇 2022-06-12

发表评论

登录后才能评论

评论列表(0条)

保存