zoukankan      html  css  js  c++  java
  • 【Spring Boot】Filter

    【Spring Boot】Filter

    =======================================================

    1、自动扫描

    2、手动配置

    3、@WebFilter 注解

    4、跨域过滤器

    =======================================================

    1、自动扫描

    定义Filter

    @Slf4j
    @WebFilter(filterName = "authFilter", urlPatterns = {"/*"})
    @Order(1) 
    public class AuthFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            HttpServletResponse response = (HttpServletResponse) servletResponse;
            
            filterChain.doFilter(servletRequest, servletResponse);
        }
    }

    扫描Filter

    @Slf4j
    @ServletComponentScan(basePackages = {"cn.ycx.common.filter"}) //扫描Filter
    @SpringBootApplication
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
            log.debug("rest server start success.");
        }
    }

    2、手动配置

    定义Filter

    @Slf4j
    @Component
    public class AuthFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            HttpServletResponse response = (HttpServletResponse) servletResponse;
            
            filterChain.doFilter(servletRequest, servletResponse);
        }
    }

    Java配置Filter

    @Configuration
    public class FilterConfig {
        @Autowired
        private AuthFilter authFilter;
        @Bean
        public FilterRegistrationBean registerAuthFilter() {
            FilterRegistrationBean registration = new FilterRegistrationBean();
            registration.setFilter(authFilter);
            registration.addUrlPatterns("/*");
            registration.setName("authFilter");
            registration.setOrder(1);  //值越小,Filter越靠前。
            return registration;
        }
    }

    web.xml配置Filter,执行顺序是按照Filter在web.xml中的先后顺序执行

    <filter>
         <filter-name>AuthFilter</filter-name>
         <filter-class>cn.ycx.common.filter.AuthFilter</filter-class>
    </filter>
    <filter-mapping>
         <filter-name>AuthFilter</filter-name>
         <url-pattern>/*</url-pattern>
    </filter-mapping>

    3、@WebFilter 注解

    @WebFilter 的属性

    属性 类型 描述
    filterName String 指定过滤器的 name 属性,等价于 <filter-name>
    value String[] 该属性等价于 urlPatterns 属性。但是两者不应该同时使用。
    urlPatterns String[] 指定一组过滤器的 URL 匹配模式。等价于 <url-pattern> 标签。
    servletNames String[] 指定过滤器将应用于哪些 Servlet。取值是 @WebServlet 中的 name 属性的取值,或者是 web.xml 中 <servlet-name> 的取值。
    dispatcherTypes DispatcherType 指定过滤器的转发模式。具体取值包括: ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。
    initParams WebInitParam[] 指定一组过滤器初始化参数,等价于 <init-param> 标签。
    asyncSupported boolean 声明过滤器是否支持异步操作模式,等价于 <async-supported> 标签。
    description String 该过滤器的描述信息,等价于 <description> 标签。
    displayName String 该过滤器的显示名,通常配合工具使用,等价于 <display-name> 标签。
    largeIcon String 大图标
    smallIcon String 小图标

    4、跨域过滤器

    package cn.ycx.web.filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    /**
     * 跨域访问
     */
    @WebFilter(filterName="/bcrossDomainFilter", urlPatterns="/*")
    public class CrossDomainFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest httpServletRequest = (HttpServletRequest) request;
            HttpServletResponse httpServletResponse = (HttpServletResponse) response;
            String path = httpServletRequest.getServletPath();
            System.out.println("CrossDomainFilter->" + path);
            // 跨区请求 crossDomainFilter
            httpServletResponse.addHeader("Access-Control-Allow-Origin", "*");
            httpServletResponse.addHeader("Access-Control-Allow-Methods", "POST");
            httpServletResponse.addHeader("Access-Control-Allow-Methods", "GET");
            httpServletResponse.addHeader("Access-Control-Allow-Headers", "x-requested-with,content-type");
            chain.doFilter(request, response);
        }
    }
  • 相关阅读:
    css3在不同型号手机浏览器上的兼容一览表
    android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
    web app iphone4 iphone5 iphone6 iphone6 Plus响应式布局 适配代码
    用sql查询当天,一周,一个月的数据
    VS2010 生成Xml格式的注释文档
    VS XML注释
    css3 box-sizing属性
    CSS技巧(一):清除浮动
    使用Windows Server 2003搭建一个asp+access网站
    如何在Windows Server 2003搭建Windows+iis+asp+access环境
  • 原文地址:https://www.cnblogs.com/yangchongxing/p/13792637.html
Copyright © 2011-2022 走看看