过滤器
关于过滤器
导入过滤器
导包
导入 Filter 类
实现类
public class FilterDemo1 implements Filter {
}
定义过滤器
package servlet;
import javax.servlet.*;
import java.io.IOException;
public class TestFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
}
@Override
public void destroy() {
}
}
关注过滤规则
效果
拦截效果
拦截后页面会变成白色的
放行
这里写上222 会显示吗?
1111这里是请求进来时要做的
相关操作相关操作可以是验证
也可以是统一的设置请求的编码为uf8
2222这里是响应给浏览器前的一次操作
一般可以设置响应头
执行流程
路径配置
dispatcherTypes 属性
案例 判断是否登录
过滤器的静态资源放行
实例代码
package filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebFilter("/*")
public class TestFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 把大类型转成小类型
HttpServletRequest req = (HttpServletRequest) servletRequest;
HttpServletResponse resp = (HttpServletResponse) servletResponse;
// 进行 网址的过滤
// 假设 请求路径中包含 test 关键词,那就一定要进行登陆验证
String requestURI = req.getRequestURI();
System.out.println(requestURI);
// 针对路径进行验证
// 只要的你的路径不包含 他的话就给你放行
// contains 包含
if (requestURI.contains("/test")){
// 过滤
// 获取 session
HttpSession session = req.getSession();
// 获取 user 键
Object user = session.getAttribute("user");
// 判断是否登录
if (user != null){
filterChain.doFilter(servletRequest,servletResponse);
}else{
resp.sendRedirect("user?action=login");
}
}else{
filterChain.doFilter(servletRequest,servletResponse);
}
}
@Override
public void destroy() {
}
}
test 的 servlet
package servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/test")
public class Test extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getRequestDispatcher("Test.jsp").forward(req,resp);
}
}