ruoyi框架使用了shiro框架, 因此,如果采用一般的方式的话,Filter的加载顺序应该在shiro之前,这样会导致你取session失败或者直接退出登录。也就是每个经过filter的session和控制器中的session不一致。可以使用shiro提供的Filter,要在shiro之后加载就可以了。步骤如下:
-
在
com/ruoyi/framework/shiro/web/filter
中添加一个过滤器,继承
AccessControlFilter
,例如
AuthFilter
,代码如下
public class FrontFilter extends AccessControlFilter {
/**
* 过滤器会先执行isAccessAllowed方法,如果返回true,直接通过过滤器,意味着权限校验通过;
* 返回false的话,会进入到onAccessDenied,这个函数如果返回true,则继续处理请求,即往下传递;
* 如果返回false的话,就直接处理。
*/
@Override
protected boolean isAccessAllowed(ServletRequest servletRequest, ServletResponse servletResponse, Object o) throws Exception {
HttpServletRequest request = (HttpServletRequest) servletRequest;
// todo 判断是否登录
return false;
}
@Override
protected boolean onAccessDenied(ServletRequest servletRequest, ServletResponse servletResponse) throws Exception {
// 直接处理,重定向到登陆界面,登录url在ShiroConfig中定义
saveRequestAndRedirectToLogin(servletRequest, servletResponse);
return false;
}
}
-
在
ShiroConfig
中,实例化这个过滤器
public FrontFilter frontFilter()
{
FrontFilter frontFilter = new FrontFilter();
// frontLoginUrl 定义的登录地址
frontFilter.setLoginUrl(frontLoginUrl);
return frontFilter;
}
-
在
shiroFilterFactoryBean
函数中,注册这个过滤器,并且匹配路由
// 匹配路由
filterChainDefinitionMap.put("/agent/**", "anon, frontFilter");
// 添加过滤器
filters.put("frontFilter", frontFilter());
版权声明:本文为Steven_LXF原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。