在 Java Servlet 中,“过滤”通常是指使用 Filter(过滤器) 来拦截请求和响应。下面从概念、使用步骤到常见示例给你一个清晰说明。
Filter(过滤器) 是 Servlet 规范中的组件,用于在:
进行统一处理,比如:
init() -> 初始化(只执行一次)
doFilter() -> 每次请求都会执行
destroy() -> 容器销毁时执行
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*") // 拦截所有请求
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) {
System.out.println("Filter 初始化");
}
@Override
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
System.out.println("请求前处理");
// 放行请求
chain.doFilter(request, response);
System.out.println("响应后处理");
}
@Override
public void destroy() {
System.out.println("Filter 销毁");
}
}
@WebFilter(urlPatterns = "/*")
<filter>
<filter-name>myFilter</filter-name>
<filter-class>com.example.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
chain.doFilter(request, response);
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
Object user = req.getSession().getAttribute("user");
if (user == null) {
res.sendRedirect("/login.jsp");
return;
}
chain.doFilter(request, response);
@WebFilter("/admin/*")
或:
@WebFilter(urlPatterns = {"/user/*", "/order/*"})
<filter-mapping> A </filter-mapping>
<filter-mapping> B </filter-mapping>
执行顺序:
A → B → Servlet → B → A
| 对比项 | Filter | Servlet |
|---|---|---|
| 作用 | 预处理 / 后处理 | 业务处理 |
| 是否能放行 | 能(chain.doFilter) | 不能 |
| 是否必须 | 可选 | 核心 |
如果你有具体场景(如 Spring Boot 过滤、XSS 过滤、权限控制),我可以给你更针对性的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。