引入需要用到的依赖包

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>11.0.2</version>
</dependency>

在 com > ruoyi > framework > ShiroConfig.java 的 shiroFilterFactoryBean 方法中配置原有过滤器放行策略

filterChainDefinitionMap.put("/api/**", "anon");

任意位置创建 Filter 过滤器

import com.alibaba.fastjson.JSONObject;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

public class BaseFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        Map<String, Object> map = new HashMap<>();
        String url = ((HttpServletRequest)servletRequest).getRequestURI();
        try {
            if(url != null){
                // 登录请求直接放行
                if("/api/login".equals(url)) {
                    filterChain.doFilter(servletRequest, servletResponse);
                    return;
                }else{
                    //其他请求验证流程
                    String license = ((HttpServletRequest)servletRequest).getHeader("license");
                    if("".equals(license)) { // 验证成功放行(判断自行修改)

                        // 传递自定义数据
                        servletRequest.setAttribute("data", "数据");
                        filterChain.doFilter(servletRequest,servletResponse);
                        return;
                    }else { // 验证失败返回失败信息
                        map.put("code", -1);
                        map.put("message", "验证失败");
                    }
                }
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
        JSONObject jsonObject = new JSONObject(map);
        servletResponse.setContentType("application/json");
        servletResponse.setCharacterEncoding("utf-8");
        PrintWriter pw=servletResponse.getWriter();
        pw.write(jsonObject.toString());
        pw.flush();
        pw.close();
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void destroy() {}
}

在 com > ruoyi > framework > FilterConfig.java 中配置过滤器方法

@Bean
public FilterRegistrationBean<Filter> baseFilter(){
    FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean();
    filterRegistrationBean.setFilter(new BaseFilter()); // 配置刚刚创建的过滤器
    filterRegistrationBean.setUrlPatterns(Lists.newArrayList("/api/*")); // 过滤器生效路径
    filterRegistrationBean.setOrder(1);
    return filterRegistrationBean;
}

标签: Java, Ruoyi

添加新评论