Java如何使用@WebFilter注解定义过滤器?
以下示例显示了如何使用@WebFilter注解创建servlet过滤器。我们将创建一个简单的过滤器,该过滤器将检查http会话对象中是否存在属性。如果未找到任何属性,则此过滤器会将用户重定向到登录页面。
package org.nhooo.example.filter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebFilter(urlPatterns = {"/*"}, description = "Session Checker Filter")
public class SessionCheckerFilter implements Filter {
private FilterConfig config = null;
public void init(FilterConfig config) throws ServletException {
this.config = config;
config.getServletContext().log("Initializing SessionCheckerFilter");
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain)
throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
//
// 检查用户的会话属性是否包含一个属性
//命名为AUTHENTICATED。如果该属性不存在,则重定向
// 用户登录页面。
//
if (!request.getRequestURI().endsWith("login.jsp") &&
request.getSession().getAttribute("AUTHENTICATED") == null) {
response.sendRedirect(request.getContextPath() + "/login.jsp");
}
chain.doFilter(req, res);
}
public void destroy() {
config.getServletContext().log("Destroying SessionCheckerFilter");
}
}在Servlet3.0规范中定义的@WebFilter注解诞生之前。为了使过滤器起作用,我们必须在web.xml中使用filter和filter-mapping元素将其注册到文件中。并且一旦激活,它将与当前Servlet上下文的过滤器链中的其他过滤器协作。