1.
-
过滤器
import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; /** * @author sheng_zs@126.com * @date 2021-07-08 10:47 */ @Slf4j @Component public class TestFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { log.error("init()"); log.error("getFilterName: {}", filterConfig.getFilterName()); Enumeration<String> parameterNames = filterConfig.getInitParameterNames(); while (parameterNames.hasMoreElements()) { log.error("parameterNames: {}", parameterNames.nextElement()); } log.error("==================================="); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { log.error("进入了拦截器"); HttpServletRequest request = (HttpServletRequest) servletRequest; request.getParameterMap().values().forEach(e -> {if (e != null) { for (String s : e) { log.error(s); } }}); String queryString = request.getQueryString(); log.error("queryString:{}", queryString); Map<String, Object> result = new HashMap<>(); result.put("user", request.getHeader("user")); result.put("type", request.getHeader("type")); result.put("message", "信息参数有误"); servletResponse.setCharacterEncoding("utf-8"); servletResponse.setContentType("application/json; charset=utf-8"); servletResponse.getWriter().println(JSON.toJSONString(result)); // filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { log.error("destroy()"); } }@Slf4j @Component public class TestFilter extends OncePerRequestFilter { @Override protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException { // 不过滤的方法设置 return super.shouldNotFilter(request); } @Override protected void initFilterBean() throws ServletException { // init() super.initFilterBean(); } @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { } } -
过滤器注册
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.Collections; /** * @author sheng_zs@126.com * @date 2021-07-08 10:58 */ @Configuration public class TestFilterConfig { @Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); // 设置过滤器顺序 filterRegistrationBean.setOrder(1); // 注册 Filter filterRegistrationBean.setFilter(new TestFilter()); // 设置要过滤的拦截路径 filterRegistrationBean.setUrlPatterns(Collections.singletonList("/**")); // 过滤器的名字 filterRegistrationBean.setName("testFilter"); return filterRegistrationBean; } }
本文档展示了如何在Spring Boot应用程序中创建并注册自定义过滤器`TestFilter`,该过滤器用于拦截请求,获取请求头信息,并在响应中返回。过滤器的生命周期方法如`init()`和`destroy()`也被覆盖,用于初始化和销毁操作。同时,`OncePerRequestFilter`的子类`TestFilter`被定义,但未在实际过滤过程中使用。过滤器的注册通过`FilterRegistrationBean`完成,设置过滤器顺序、拦截路径和名称。
4万+

被折叠的 条评论
为什么被折叠?



