本文共 1586 字,大约阅读时间需要 5 分钟。
这是一个用于登录验证的过滤器类,能够根据请求路径判断用户是否已登录。该过滤器能够识别并允许通过以下资源:login.jsp、loginServlet以及其它静态资源如css、js和图片资源。对于未登录用户(即session中未能获取到用户对象的访问请求),过滤器会自动跳转至登录页面并设置登录提示信息。
package cn.itcast.web.filter;import javax.servlet.*;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import java.io.IOException;@WebFilter("/*")public class LoginFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { HttpServletRequest request = (HttpServletRequest) req; String uri = request.getRequestURI(); // 检查是否需要跳转至登录页面 if (uri.contains("/login.jsp") || uri.contains("/loginServlet") || uri.contains("css/") || uri.contains("js/") || uri.contains("fonts/") || uri.contains("/checkCodeServlet")) { chain.doFilter(req, resp); return; } // 判断用户是否已登录 Object user = request.getSession().getAttribute("user"); if (user != null) { chain.doFilter(req, resp); } else { request.setAttribute("login_msg", "您尚未登录,请登录"); request.getRequestDispatcher("/login.jsp").forward(request, resp); } } public void init(FilterConfig config) throws ServletException { } public void destroy() { }}
这个功能的核心逻辑包括:
HttpServletRequest
对象以便获取更多信息这个Filter默认会拦住所有请求并根据上述逻辑进行处理,能够有效地整合登录验证功能到整个应用中。
转载地址:http://suqyk.baihongyu.com/