shiro与lombok

lombok是个好东西,能让代码变得非常简洁,常用的@Data@Getter@Setter等注解,都能极大提高程序开发效率。但是当它和shiro相遇时,可能就是坑了。
最近使用shiro时,发现用户登录后,并没有执行授权动作,从而导致程序无法正常运行。经过测试,同一用户在不同机器登录后,后者就会出现此问题。经过跟踪调试,发现用户在多台机器登录时,如果之前没有退出,就能在shiro的缓存里获取到用户之前登录的授权信息。
这里就不写我是如何一步一步找问题的过程了,直接写结论。shiro会使用认证对象的hashcode作为key来缓存授权信息。因此同一用户,其认证对象hashcode是相同的,你问我为什么?,见代码,以下是我们程序中的用户认证对象的类:

@Data
public class UserSession{
    .
    .
    .
}

在lombok的@Data注解中,会重写当前对象的hashcode()方法,最终的结果就是,如果两个对象的内容是完全一样的,那么他们的hashcode也会变的一样。这样在shiro中,当用重复登录时,shiro就会认为缓存中已经有了授权信息,从而出现问题。
找到了问题,解决方法就简单了,使用@Getter@Setter替换掉原有的@Data注解即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值