版权声明:转载请注明出处 https://blog.csdn.net/cowbin2012/article/details/85194431
过滤器Filter,是Servlet的的一个实用技术了。可通过过滤器,对请求进行拦截,比如读取session判断用户是否登录、判断访问的请求URL是否有访问权限(黑白名单)等。主要还是可对请求进行预处理。接下来介绍下,在springboot如何实现过滤器功能
@WebFilte
利用@WebFilter注解配置
//注册器名称为customFilter,拦截的url为所有
@WebFilter(filterName="customFilter",urlPatterns={"/*"})
@Slf4j
@Configuration
public class CustomFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//项目启动时初始化,只始化一次
log.info("filter 初始化");
}
@Override
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
log.info("doFilter 请求处理");
//对request、response进行一些预处理
// 比如设置请求编码
// servletRequest.setCharacterEncoding("UTF-8");
// servletResponse.setCharacterEncoding("UTF-8");
//链路 直接传给下一个过滤器
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
log.info("filter 销毁");
}
}
FilterRegistrationBean方式
两个步骤:
-
实现Filter接口,实现Filte
public class MyFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}@Override public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain) throws IOException, ServletException { // TODO Auto-generated method stub HttpServletRequest request = (HttpServletRequest) srequest; System.out.println("this is MyFilter,url :"+request.getRequestURI()); filterChain.doFilter(srequest, sresponse); } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
}
-
添加@Configuration 注解,将自定义Filter加入过滤链
@Configuration
public class WebConfiguration {
@Bean
public RemoteIpFilter remoteIpFilter() {
return new RemoteIpFilter();
}@Bean public FilterRegistrationBean testFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new MyFilter()); registration.addUrlPatterns("/*"); registration.addInitParameter("paramName", "paramValue"); registration.setName("MyFilter"); registration.setOrder(1); return registration; }
}