spring-security(五):会话管理:为何使用了自定义数据库模型后,session管理策略不生效了?

1.解决方案

重写实体类的hashcode()方法和equals方法,参考如下:

public class SysUsers implements UserDetails {
     private String userName;
    //.......省略属性信息、setter、getter方法以及实现的方法

    @Override
    public int hashCode() {
        return this.userName.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        return obj instanceof SysUsers && Objects.equals(this.userName, ((SysUsers) obj).userName);
    }
}

2.原因分析

在这里插入图片描述

上图中principals属性是一个concurrentMap,但是它使用用户实体作为key。

但是在hashMap中,以对象为作为key,必须重写hashcode和equals两个方法。

这导致一个用户每次登录注销时计算得到的key都不相同,在这种情况下,不但达不到会话并发控制的效果,还会引发内存泄漏。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值