shiro在remember me状态下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;  
    }  

}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值