SpringBoot 3以后的 Filter 包已经从 javax.servlet 变成了 jakarta.servlet
在Spring Boot中使用Servlet Filter时,需注意以下几点:首先,javax.servlet-api依赖在pom.xml中添加后可能无效,建议使用jakarta.servlet包。其次,init和destroy方法不再使用default关键字,需显式实现。示例代码展示了如何定义并注册一个Filter,使用@Component和@WebFilter注解,并实现init、doFilt
·
Spring Boot - Servlet Filter Spring Boot – Servlet Filter | GeeksforGeeks
这是官方说明。要注意!!!⚠️
使用时,在 porn.xml 文件加了引用坐标也无效
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
且,javax.servlet 缺省的 init and destroy 的接口也去掉了 default 关键词。
代码变更为
package biz.baijing.filter;
import jakarta.servlet.Filter;
import jakarta.servlet.FilterChain;
import jakarta.servlet.FilterConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@Component
@WebFilter(urlPatterns = "/*")
public class UniFilter implements jakarta.servlet.Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("UniFilter init 启动");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("DoFilter , start 启动中");
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
System.out.println("UniFilter destroy 关闭");
}
}
这里的 init and destroy 是「 default 」定义的。
Filter 的源代码
package jakarta.servlet;
import java.io.IOException;
public interface Filter {
default void init(FilterConfig filterConfig) throws ServletException {
}
void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;
default void destroy() {
}
}
更多推荐
所有评论(0)