欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

Exception ex)throws Exception {log.i 图纸加密 nfo(afterCompleti

点击: 次  来源:劳务派遣管理系统 时间:2018-08-04

原文出处: oKong

媒介

在实际开拓进程中,常常会遇见一些好比系统启动初始化信息、统计在耳目数、在线用户数、过滤敏高词汇、会见权限节制(URL级别)等业务需求。这些对付业务来说一般上是无关的,业务方是无需干系的,业务只需要干系本身内部业务的工作。所以一般上实现以上的成果,昆山软件公司,城市或多或少的用到本日筹备讲授的过滤器监听器拦截器来实现以上成果。

过滤器

过滤器Filter,是Servlet的的一个实用技能了。可通过过滤器,对请求举办拦截,好比读取session判定用户是否登录、判定会见的请求URL是否有会见权限(利害名单)等。主要照旧可对请求举办预处理惩罚。接下来先容下,昆山软件开发,在springboot如何实现过滤器成果。

操作WebFilter注解设置

@WebFilterServlet3.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 处事启动");
    }
}

启动后,节制台输出:

 Exception ex)throws Exception {log.i 图纸加密 nfo(afterCompletion:请求挪用完成后回调要领

过滤器已经生效了。但当注册多个过滤器时,无法指定执行顺序的,原本利用web。xml设置过滤器时,是可指定执行顺序的,但利用@WebFilter时,没有这个设置属性的(需要共同@Order举办),所以接下来先容下通过FilterRegistrationBean举办过滤器的注册。

–小能力–

  1. 通过过滤器的名字,举办顺序的约定,好比LogFilterAuthFilter劳务派遣管理系统,此时AuthFilter就会比LogFilter先执行,因为首字母AL前面。
  2. 通过@Order指定执行顺序,值越小,越先执行

FilterRegistrationBean方法

FilterRegistrationBeanspringboot提供的,此类提供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即可