zoukankan      html  css  js  c++  java
  • java登录拦截Filter

    此例子为一个简单的登录拦截。

    首先在web.xml中配置拦截类。

    <filter-mapping>
            <filter-name>SessionFilter</filter-name>
            <url-pattern>/*</url-pattern>
            <dispatcher>REQUEST</dispatcher>
        </filter-mapping>
    <filter>
        <filter-name>SessionFilter</filter-name>
        <!-- 拦截类 -->
        <filter-class>com.skin.generate.user.UserLoginFilter</filter-class>
        <init-param>
            <param-name>loginUrl</param-name>
            <param-value>/finder/login.html</param-value>
        </init-param>
        <!-- 配置参数 比如不拦截的路径 -->
        <init-param>
            <param-name>excludes</param-name>
            <param-value>
                /register.html,
                /resource/**/*,
                /note/**/*
            </param-value>
        </init-param>
    </filter> 

    其次就是拦截类的编写。

    package com.skin.generate.user;
    import java.io.IOException;
    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.http.Cookie;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import com.skin.finder.security.UserSession;
    import com.skin.finder.web.util.Client;
    import com.skin.finder.web.util.CookieUtil;
    import com.skin.generate.entity.User;
    
    public class UserLoginFilter implements Filter {
    /*
         * String nofilter; String nofilterFiles[]; String sendRedirect;
         */
    
        public void destroy() {
    
        }
    
        public void doFilter(ServletRequest req, ServletResponse res,
                FilterChain chain) throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) res;
            String path = request.getServletPath();
            String url = request.getRequestURI();
            
            // 如果不需要过滤的静态文件,直接放行
            if (path.endsWith(".css") || path.endsWith(".js")
                    || path.endsWith("Login.html") 
                    || url.indexOf("resource") > 0 || url.indexOf("note") > 0
                    || url.endsWith("login.jsp") || path.endsWith(".gif")
                    || path.endsWith(".ico")) {
                chain.doFilter(request, response);
                return;
            } else {
                if (checkUser(request, response)) {
                    chain.doFilter(request, response);// 如果用户已经登录,就放行
                    return;
                } else {
                    // 没有登录,重定向到登录页面
                    String contextPath = getContextPath(request);
                    response.sendRedirect(contextPath+ "/template/finder/login.jsp");
                    return;
                }
            }
    
        }
    
        protected String getContextPath(HttpServletRequest request) {
            String contextPath = request.getContextPath();
    
            if ((contextPath == null) || (contextPath.equals("/"))) {
                return "";
            }
            return contextPath;
        }
    
        private boolean isInArray(String path, String nofilterFiles[]) {
            for (int i = 0; i < nofilterFiles.length; i++) {
                String nofilterFile = nofilterFiles[i];
                if (nofilterFile.equals(path)) {
                    return true;
                }
            }
            return false;
        }
    
        private boolean checkUser(HttpServletRequest request,
                HttpServletResponse response) throws IOException {
            
            //1.判断cookie 是否存在
            Cookie cookie = CookieUtil.getCookie(request, Client.COOKIE_NAME);
            if(cookie ==null ){
                return false;
            }
            
            //2.校验session
            HttpSession session = request.getSession(false);// 如果不存在返回空
            if (session == null) {
                return false;
            }
            //3.校验登录用户
            Object obj = session.getAttribute(SessionUtils.USER_NAME);
            if (obj == null) {
                return false;
            }
            
            return true;
        }
    
        public void init(FilterConfig config) throws ServletException {
            /*
             * nofilter = config.getInitParameter("excludes"); 
             * nofilterFiles =nofilter.split(","); sendRedirect =
             * config.getInitParameter("loginUrl");
             */
            // System.out.println(Arrays.asList(nofilterFiles));
        }
    
    }
  • 相关阅读:
    php 对象转数组
    一张图解析FastAdmin中的表格列表的功能
    tp中打印sql,查看语句信息
    fastadmin 增加外键表搜索
    fastadmin 后台管理中,权限设置,不同管理员,显示不同的数据
    Python exec 函数
    Python eval() 函数
    Python next() 函数
    Python iter() 函数
    Python range() 函数
  • 原文地址:https://www.cnblogs.com/TimeSay/p/9140654.html
Copyright © 2011-2022 走看看