RuoYi框架添加自定义的过滤器

  • Post author:
  • Post category:其他


ruoyi框架使用了shiro框架, 因此,如果采用一般的方式的话,Filter的加载顺序应该在shiro之前,这样会导致你取session失败或者直接退出登录。也就是每个经过filter的session和控制器中的session不一致。可以使用shiro提供的Filter,要在shiro之后加载就可以了。步骤如下:



  1. 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;
    }
}


  1. ShiroConfig

    中,实例化这个过滤器
public FrontFilter frontFilter()
    {
        FrontFilter frontFilter = new FrontFilter();
        // frontLoginUrl 定义的登录地址
        frontFilter.setLoginUrl(frontLoginUrl);
        return frontFilter;
    }


  1. shiroFilterFactoryBean

    函数中,注册这个过滤器,并且匹配路由
    // 匹配路由
        filterChainDefinitionMap.put("/agent/**", "anon, frontFilter");
// 添加过滤器
        filters.put("frontFilter", frontFilter());



版权声明:本文为Steven_LXF原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。