SpringBoot入门系列(四)--过滤器Filter

过滤器:filter

filter:
1.在HttpServletRequest到达 Servlet 之前,拦截客户的HttpServletRequest 。根据需要检查HttpServletRequest,也可以修改HttpServletRequest 头和数据。
2.在HttpServletResponse到达客户端之前,拦截HttpServletResponse 。根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。

SpringBoot 配置filter

/**
 * 过滤器
 */
public class MyFilter implements Filter {
    private static Logger log = LoggerFactory.getLogger(MyFilter.class);
    /**
     * 不过滤的地址
     */
    private String[] excludedUris;

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain)
            throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) srequest;
        HttpServletResponse response = (HttpServletResponse) sresponse;
        String uri = request.getServletPath();
        log.debug("http req {}", uri);
        if (isExcludedUri(uri)) {
            filterChain.doFilter(srequest, sresponse);
        } else {
            log.debug("http req do not access {}", uri);
            response.sendRedirect(request.getContextPath() + "/html/c");
        }
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        /**加载初始化参数*/
        excludedUris = filterConfig.getInitParameter("excludedUri").split(",");
    }

    /**
     * 判断uri是否过滤
     * @param uri
     * @return
     */
    private boolean isExcludedUri(String uri) {
        if (excludedUris == null || excludedUris.length <= 0) {
            return false;
        }
        for (String ex : excludedUris) {
            uri = uri.trim();
            ex = ex.trim();
            if (uri.toLowerCase().matches(ex.toLowerCase().replace("*", ".*")))
                return true;
        }
        return false;
    }
}

webmvc配置filter使其生效,并配置初始化参数和拦截路径

@Configuration
public class WebConfig {
    @Bean
    public FilterRegistrationBean<?> testFilterRegistration() {
        // 配置无需过滤的路径或者静态资源,如:css,imgage等
        StringBuffer excludedUriStr = new StringBuffer();
        excludedUriStr.append("/html/c");

        FilterRegistrationBean<MyFilter> registration = new FilterRegistrationBean<MyFilter>();
        registration.setFilter(new MyFilter());
        registration.addUrlPatterns("/*");
        registration.addInitParameter("excludedUri", excludedUriStr.toString());
        registration.setName("MyFilter");
        registration.setOrder(1);
        return registration;
    }
}

栗子

我们有3个请求 过滤器过滤路径 /* 过滤规则 全部跳转到html/c
/html/a – a.html 过滤
/html/b –b.html 过滤
/html/c –c.html 不过滤

启动项目访问任意路径 都会被拦截,并重定向到html/c–c.html中

源码下载

点这里下载完整源码

猜你喜欢

转载自blog.csdn.net/zl_1079167478/article/details/79470416