spring boot filter (maven)

本文介绍了如何在Spring Boot应用中捕获404错误时的原始请求URL。通过对比拦截器与过滤器的工作原理,解释了为何过滤器更适合此场景,并提供了具体的实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(使用方式直接看4.)今天想要完成一个功能:在请求404时,获取请求url。一开始想在controller控制层获取,发现不行,又想到Interceptor拦截器中获取,发现还是获取不到,两种方式从request中得到的都已经是spring boot默认处理后的路径,即http://127.0.0.1:8080/项目名/error这种路径,并不是真实请求的路径,所以到网上查了一下,发现解决办法:使用filter过滤器。那么为什么过滤器就可以获取到而拦截器得不到呢?我就产生了这个疑问,下面是我个人的简单理解。

1.filter:过滤器,生命周期:HttpRequest ----> Filter ----> Servlet ----> Controller/Action/... ----> Filter ----> HttpResponse

2.interceptor:拦截器,生命周期: HttpRequest ----> DispactherServlet ----> HandlerInterceptor ---->Controller----> HandlerInterceptor ----> HttpResponse

3.总结:Filter和Interceptor的执行顺序,过滤前-servlet-拦截前-控制层执行-拦截后-过滤后,拦截器得到的已经是servlet即springmvc的DispactherServlet 处理后的request,在404的时候,DispactherServlet 已经将请求转到默认的/error路径,所以拦截器是获取不到原来的请求url了,而过滤器可以得到。

4.filter在spring boot中的使用:

(1)自定义过滤器类

@Component
@WebFilter(filterName = "requestFilter",urlPatterns = "/*")
public class RequestFilter implements Filter{

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain filterChain) throws IOException, ServletException {
		
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		
	}

(2)启动类中添加扫描注解

 

@ServletComponentScan
public class AppConfig {
}

备注:

1.filterName建议使用类名,首字母小写。原因:filterName的值需要和@Component中的值即容器中bean名一致,否则,会创建2个过滤器,执行2次doFilter()!而@Component值即容器中bean名默认为类名,首字母小写。当然,你可以手动书写@Component的value,只要保证filterName的值和@Component的value一致就ok了。且一定要配置filterName,因为filterName默认不是首字母小写的类名。

2.urlPatterns:过滤的请求路径。

3.@WebFilter:作为容器中的过滤器,提供过滤器参数配置。

4.@ServletComponentScan:网上说法,用来扫描@WebFilter注解,使过滤器生效。如果只有少量过滤器,可配置在过滤器类上,不是一定要配置在启动类上的。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值