在SpringBoot中使用Filter有两种方式
- 注解注册Filter
- 代码注册
通过代码注册的方式来使用Filter:
1、创建自定义的InterfaceAuthenticationFilter类,实现Filter接口
import org.apache.log4j.Logger;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* @Description: 接口鉴权过滤器
* @ClassName: InterfaceAuthenticationFilter
* @Author: liangbl
* @Date: 2019/12/3 13:39
*/
public class InterfaceAuthenticationFilter implements Filter {
private static Logger logger = Logger.getLogger(InterfaceAuthenticationFilter.class);
private static List<String> urlPaterrns = new ArrayList<>();
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 忽略的url
urlPaterrns.add("login.do");
logger.info("InterfaceAuthenticationFilter init:" + filterConfig.toString());
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
logger.info("开始进行过滤处理");
HttpServletRequest request = (HttpServletRequest) servletRequest;
String url = request.getRequestURI();
if (urlPaterrns.contains(url)) {
//调用该方法后,表示过滤器经过原来的url请求处理方法
filterChain.doFilter(servletRequest, servletResponse);
return;
}
if (url.contains("/liang")) {
logger.info("拦截到非法请求");
}
}
@Override
public void destroy() {
logger.info("InterfaceAuthenticationFilter destroy.");
}
}
2、启动类注册自定义InterfaceAuthenticationFilter
@Bean
public FilterRegistrationBean InterfaceAuthenticationFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new InterfaceAuthenticationFilter());
registration.addUrlPatterns("/*");
registration.addInitParameter("paramName", "paramValue");
registration.setName("InterfaceAuthenticationFilter");
registration.setOrder(Integer.MIN_VALUE);
return registration;
}