知乎专栏 |
配置过滤器
<filter> <filter-name>LoginFilter</filter-name> <filter-class>cn.netkiller.Filter</filter-class> <init-param> <param-name>username</param-name> <param-value>netkiller</param-value> </init-param> </filter> <filter> <filter-name>LoginFilter</filter-name> <filter-class>cn.netkiller.Filter</filter-class> </filter> <filter-mapping> <filter-name>LoginFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
实现 Filter 接口
public class LoginFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("init LoginFilter"); //获取Filter初始化参数 String username = filterConfig.getInitParameter("username"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //把ServletRequest和ServletResponse转换成真正的类型 HttpServletRequest req = (HttpServletRequest)request; HttpSession session = req.getSession(); //由于web.xml中设置Filter过滤全部请求,可以排除不需要过滤的url String requestURI = req.getRequestURI(); if(requestURI.endsWith("login.jsp")){ chain.doFilter(request, response); return; } //判断用户是否登录,进行页面的处理 if(null == session.getAttribute("user")){ //未登录用户,重定向到登录页面 ((HttpServletResponse)response).sendRedirect("login.jsp"); return; } else { //已登录用户,允许访问 chain.doFilter(request, response); } } @Override public void destroy() { System.out.println("destroy!!!"); } }