媒介
在实际开拓进程中,常常会遇见一些好比系统启动初始化信息、统计在耳目数、在线用户数、过滤敏高词汇、会见权限节制(URL级别)等业务需求。这些对付业务来说一般上是无关的,业务方是无需干系的,业务只需要干系本身内部业务的工作。所以一般上实现以上的成果,昆山软件公司,城市或多或少的用到本日筹备讲授的过滤器、监听器、拦截器来实现以上成果。
过滤器
过滤器Filter,是Servlet的的一个实用技能了。可通过过滤器,对请求举办拦截,好比读取session判定用户是否登录、判定会见的请求URL是否有会见权限(利害名单)等。主要照旧可对请求举办预处理惩罚。接下来先容下,昆山软件开发,在springboot如何实现过滤器成果。
操作WebFilter注解设置
@WebFilter时Servlet3.0新增的注解,原先实现过滤器,需要在web.xml中举办设置,而此刻通过此注解,启动启动时会自动扫描自动注册。
编写Filter类:
//注册器名称为customFilter,拦截的url为所有
@WebFilter(filterName="customFilter",urlPatterns={"/*"})
@Slf4j
public class CustomFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("filter 初始化");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
log.info("doFilter 请求处理惩罚");
//对request、response举办一些预处理惩罚
// 好比配置请求编码
// request.setCharacterEncoding("UTF-8");
// response.setCharacterEncoding("UTF-8");
//TODO 举办业务逻辑
//链路 直接传给下一个过滤器
chain.doFilter(request, response);
}
@Override
public void destroy() {
log.info("filter 销毁");
}
}
然后在启动类插手@ServletComponentScan注解即可。
@SpringBootApplication
@ServletComponentScan
@Slf4j
public class Chapter7Application {
public static void main(String[] args) {
SpringApplication.run(Chapter7Application.class, args);
log.info("chapter7 处事启动");
}
}
启动后,节制台输出:

过滤器已经生效了。但当注册多个过滤器时,无法指定执行顺序的,原本利用web。xml设置过滤器时,是可指定执行顺序的,但利用@WebFilter时,没有这个设置属性的(需要共同@Order举办),所以接下来先容下通过FilterRegistrationBean举办过滤器的注册。
–小能力–
LogFilter和AuthFilter,劳务派遣管理系统,此时AuthFilter就会比LogFilter先执行,因为首字母A比L前面。@Order指定执行顺序,值越小,越先执行FilterRegistrationBean方法
FilterRegistrationBean是springboot提供的,此类提供setOrder要领,可觉得filter配置排序值,让spring在注册web filter之前排序后再依次注册。
改写filter
其实就输出了@webFilter注解即可。其他的都没有变革。
启动类中操作@bean注册FilterRegistrationBean
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean registration = new FilterRegistrationBean();
//当过滤器有注入其他bean类时,可直接通过@bean的方法举办实体类过滤器,这样不行自动注入过滤器利用的其他bean类。
//虽然,若无其他bean需要获取时,可直接new CustomFilter(),也可利用getBean的方法。
registration.setFilter(customFilter());
//过滤器名称
registration.setName("customFilter");
//拦截路径
registration.addUrlPatterns("/*");
//配置顺序
registration.setOrder(10);
return registration;
}
@Bean
public Filter customFilter() {
return new CustomFilter();
}
注册多个时,就注册多个FilterRegistrationBean即可