Servlet拦截器笔记

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class ActionFilter implements Filter {
    private String excludedPage;
    private String[] excludedPages;
    private String[] excludedResources = {".jpg",".js",".css",".html"};

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        excludedPage = filterConfig.getInitParameter("excludedPages");
        if (excludedPage != null && excludedPage.length() > 0){
            excludedPages = excludedPage.split(",");
        }
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        /**
         * 1.先排除掉不用过滤的路径
         * 2.然后在进行用户是否登录检测,如果登录则放行,否则拦截并跳转到登录界面
         */
        HttpServletRequest req = (HttpServletRequest)request;
        HttpServletResponse resp = (HttpServletResponse)response;

        if(checkUrlPageIsExcluded(req)) {
            chain.doFilter(req,resp);
        } else {
            if (!checkUserLogin(req)) {
                req.getRequestDispatcher("/Jsp04/login.jsp").forward(req,resp);
            } else {
                chain.doFilter(req,resp);
            }
        }

    }

    /**
     * 过滤掉 excluded 路径不用拦截
     * @param req
     * @return
     */
    public boolean checkUrlPageIsExcluded(HttpServletRequest req) {
        for (String excluded : excludedPages) {
            System.out.println("path = "+req.getServletPath());
            System.out.println("Path2 = "+req.getRequestURI().toLowerCase());
            if (req.getServletPath().equals(excluded) || checkIsStaticResources(req.getServletPath())) {
                return true;
            }
        }

        return false;
    }

    public boolean checkIsStaticResources(String resourcesPath) {
        for (String suffix : excludedResources) {
            if(resourcesPath.endsWith(suffix)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 检查用户是否已经登录 以seesionid的方式
     * @param request
     * @return
     */
    public boolean checkUserLogin(HttpServletRequest request) {
        String sessionid =request.getSession().getId();

        if(UserStats.checkSessionExsit(sessionid)) {
            return true;
        }

        return false;
    }

    @Override
    public void destroy() {

    }
}

web.xml配置

 <filter>
        <filter-name>ActionFilter</filter-name>
        <filter-class>filter.ActionFilter</filter-class>
        <init-param>
            <param-name>excludedPages</param-name>
            <param-value>/ces,/hw04/login,/hw04/reg,/Jsp04/login.jsp,/Jsp04/register.jsp,/js,/Markdown</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>ActionFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

猜你喜欢

转载自blog.csdn.net/yangmingsen1999/article/details/85254124