- 控制chain.doFilter的方法的调用,来实现是否通过放行,不放行,web应用resp.sendRedirect(“/index.html”),我这里的不放行是返回给前台
servletResponse.getWriter().write("filter the data!");
。
直接上代码:
package com.riemann.springbootdemo.filter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
-
filterName 过滤器名称
-
urlPatterns 拦截请求的url,进行正则匹配,/*是拦截所有的
-
@author riemann
-
@date 2019/09/16 22:39
*/
@Order(1)
@WebFilter(filterName = “myFilter”, urlPatterns = “/*”)
public class MyFilter implements Filter {
private Logger log = LoggerFactory.getLogger(this.getClass());
/**
-
容器加载的时候调用
-
@param filterConfig
-
@throws ServletException
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("filter init, filter name: " + filterConfig.getFilterName());
}
/**
-
请求被拦截的时候进行调用
-
@param servletRequest
-
@param servletResponse
-
@param filterChain
-
@throws IOException
-
@throws ServletException
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
if (“1”.equals(servletRequest.getParameter(“id”))) {
log.info("filter uri: " + ((HttpServletRequest) servletRequest).getServletPath());
servletResponse.getWriter().write(“filter the data!”);
} else {
filterChain.doFilter(servletRequest, servletResponse);
}
}
/**
- 容器被销毁的时候被调用
*/
@Override
public void destroy() {
log.info(“filter destroy”);
}
}
postman请求,我这里模拟代码里的一个参数id为1的请求:
返回回来的是:filter the data!
日志打印也过滤到了相应的uri,说明我们的Filter过滤器已经配置成功了。
2019-09-16 23:56:51.80