shiro在remember me状态下登录,自定义session失效解决方法

本文介绍了一种在使用Shiro的RememberMe功能时,为避免自定义Session失效导致的问题,通过自定义过滤器来检测并刷新Session的方法。
使用shiro的时候,当我们使用remember me功能登录系统的时候,我们在用户登录自定义的session已经失效,这样就会影响系统正常运行;对于这种情况,我的解决方案是在shiro中自定义一个filter检测自定义的session是否失效,如果失效就读取数据加入到session中

shiro 配置文件:

<!-- 自定义加入filter,起在remember me session失效情况下刷新session作用 -->
<bean id="userSettingFilter" class="org.guess.security.filter.UserSetting" />


在shiroFilter中加入该filter

<property name="filters">
<util:map>
<entry key="userSetting" value-ref="userSettingFilter"/>
</util:map>
</property>


filter类代码:

public class UserSetting extends AccessControlFilter {

@Autowired
private UserService userService;

@Override
protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception {
Subject subject = getSubject(request, response);
if (subject == null) {
return false;
}
HttpSession session = ((HttpServletRequest)request).getSession();
User current_user = (User) session.getAttribute(Constants.CURRENT_USER);
Object recs = session.getAttribute(Constants.USER_MENUS);
//判断session是否失效,若失效刷新之
if(current_user == null || recs == null){
String username = (String) subject.getPrincipal();
User user = userService.findByLoginId(username);
session.setAttribute(Constants.CURRENT_USER, user);
session.setAttribute(Constants.USER_MENUS, user.getMenus());
}
return true;
}

@Override
protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue)
throws Exception {
return true;
}

@Override
protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
return true;
}

}


[size=large][color=red]求大师指导更好的解决方法 :) [/color][/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值