过滤器
作者:互联网
使用过滤器,首先需要实现过滤器的三个方法:init(),doFilter(),destroy()
1 package com.dayee.gateway.filter; 2 3 import lombok.extern.slf4j.Slf4j; 4 import org.springframework.core.annotation.Order; 5 import org.springframework.stereotype.Component; 6 7 import javax.servlet.*; 8 import javax.servlet.annotation.WebFilter; 9 import javax.servlet.http.HttpServletRequest; 10 import javax.servlet.http.HttpServletRequestWrapper; 11 import javax.servlet.http.HttpServletResponse; 12 import javax.servlet.http.HttpServletResponseWrapper; 13 import java.io.IOException; 14 15 /** 16 * @Author OuYangFL 17 * @Date 2022/8/5 4:26 下午 18 */ 19 @Component // 如果是用该注解,则CommonFilter过滤器类已经被注入到Spring容器中进行管理,不需要再添加过滤器配置类 20 @Slf4j 21 public class CommonFilter implements Filter { 22 @Override 23 public void init(FilterConfig filterConfig) throws ServletException { 24 log.info("初始化过滤器init"); 25 } 26 27 @Override 28 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 29 HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; 30 HttpServletResponseWrapper httpServletResponseWrapper = new HttpServletResponseWrapper((HttpServletResponse) servletResponse); 31 String requestURI = httpServletRequest.getRequestURI(); 32 log.info(String.format("请求地址URI:%s", requestURI)); 33 log.info("没有权限访问,跳转到index"); 34 servletRequest.getRequestDispatcher("/index").forward(servletRequest, servletResponse); 35 /**if (requestURI.contains("/3")){ 36 filterChain.doFilter(servletRequest, servletResponse); 37 38 }else { 39 log.info("没有权限访问,跳转到index"); 40 //httpServletResponseWrapper.sendRedirect("/"); 41 servletRequest.getRequestDispatcher("/index").forward(servletRequest, servletResponse); 42 }*/ 43 } 44 45 @Override 46 public void destroy() { 47 log.info("过滤器被销毁"); 48 } 49 }
编写过滤器配置类,用来加载过滤器类CommonFilter(在过滤器类没有添加@Component注解时)
1 package com.dayee.gateway.config; 2 3 import com.dayee.gateway.filter.CommonFilter; 4 import org.springframework.beans.factory.annotation.Autowired; 5 import org.springframework.boot.web.servlet.FilterRegistrationBean; 6 import org.springframework.context.annotation.Bean; 7 import org.springframework.context.annotation.Configuration; 8 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 9 10 /** 11 * @Author OuYangFL 12 * @Date 2022/8/6 9:47 上午 13 */ 14 15 @Configuration 16 public class FilterConfig implements WebMvcConfigurer { 17 18 19 @Bean 20 public FilterRegistrationBean filterRegistrationBean(){ 21 FilterRegistrationBean filterRegistration = new FilterRegistrationBean(new CommonFilter()); 22 //filterRegistration.setFilter(new CommonFilter()); 23 filterRegistration.addUrlPatterns("/1"); 24 filterRegistration.setName("select"); 25 filterRegistration.setOrder(1); 26 return filterRegistration; 27 } 28 }
如果是用配置类与过滤器类相结合使用,在FilterConfig中addUrlPatterns方法可以进行URL拦截等相关设置
如果不使用配置类进行加载过滤器,直接使用@Component注解将过滤器类交给Spring容器,那么对URL的拦截设置可以在doFilter方法中进行创建。
暂时理解程度到此,后续研究继续深入
标签:servlet,springframework,org,过滤器,import,servletRequest 来源: https://www.cnblogs.com/ihearts/p/16556964.html