Ruoyi 添加 Filter 过滤器并在页面控制器之前执行验证程序
引入需要用到的依赖包
<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;
}