JavaWeb—filter-filter interception mode setting
- Filters can distinguish different ways of accessing resources, and there are different ways to intercept them.
- dispatcher: access method
- REQUEST: The default value, which means that the filter is executed when a resource is directly accessed
- FORWARD: filter is executed when forwarding
- How to set
- By default, the filter can only block directly accessed resources, and cannot block forwarded access resources
- If you want the filter to be able to intercept whether it is direct access or forwarding access, you need to set the @WebFilter attribute
@WebFilter(value = "/index.jsp",dispatcherTypes={
DispatcherType.REQUEST,DispatcherType.FORWARD})
DispaterServlet
package com.lbl.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("/dispater")
public class DispaterServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
}
AccessFilter
package com.lbl.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(value = "/index.jsp",dispatcherTypes={
DispatcherType.REQUEST,DispatcherType.FORWARD})
public class AccessFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("过滤器执行了");
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {
}
}
running result: