zoukankan      html  css  js  c++  java
  • javaweb过滤器filter-判断用户是否登录

    转载:https://blog.csdn.net/caodongfang126/article/details/53220080

    写的非常详细:

    1.首先在web.xml文件添加filter
        <filter>  
            <filter-name>wxloginfilter</filter-name>  
            <filter-class>com.src.mian.filter.WXLoginFilter</filter-class>  
            <async-supported>true</async-supported>  
            <init-param>  
                <param-name>encoding</param-name>  
                <param-value>UTF-8</param-value>  
            </init-param>  
        </filter>  
        <filter-mapping>  
            <filter-name>wxloginfilter</filter-name>  
            <url-pattern>/*</url-pattern>  
        </filter-mapping>
    
    2.添加class类继承Filter
    
    public class WXLoginFilter implements Filter {
        //标示符:表示当前用户未登录
        String NO_LOGIN_NO = "NO_LOGIN_NO";
        //排除url
        //String[]此处的url路径需要登录后,才有权访问
        String[] excludeUrls = new String[]{"gift/getgift","gift/userGiftList","gift/giftInfo","game/addComment"};//
        
        
        public WXLoginFilter() {
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see Filter#destroy()
         */
        public void destroy() {
            // TODO Auto-generated method stub
        }
    
        /**过滤器
         * 判断url数组String[] excludeUrls中的url访问时是否已登录
         * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
         */
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            HttpServletResponse response = (HttpServletResponse) servletResponse;
            HttpSession session = request.getSession();
            String uri = request.getRequestURI();
            
            //System.out.println("filter url:"+uri);
            //System.out.println("sessionid:"+session.getId());
            boolean pass = false;
            if(excludeUrls != null){
                for(String url : excludeUrls){
                    if (uri.indexOf(url)>-1){
                        pass = true;
                        break;
                    }
                }
            }        
            if (!pass) {
                filterChain.doFilter(servletRequest, servletResponse);
            } else {
                if(session.getAttribute("userKey_session") != null){
                   // System.out.println("userKey_session:"+session.getAttribute("userKey_session"));
                    filterChain.doFilter(request, response);
                }else{
                    String requestType = request.getHeader("X-Requested-With"); 
                    //判断是否是ajax请求
                    if(requestType!=null && "XMLHttpRequest".equals(requestType)){
                        response.getWriter().write(this.NO_LOGIN_NO);
                    }else{
                        response.sendRedirect(request.getContextPath()+"/user/login");
                    }
                    return;
                }
            }
        }
    
        /**初始化
         * @see Filter#init(FilterConfig)
         */
        public void init(FilterConfig fConfig) throws ServletException {
            // TODO Auto-generated method stub
        }
    
    }
  • 相关阅读:
    第七章 路由 68 路由-前端路由和后端路由的概念
    第六章 组件 67 使用ref获取DOM元素和组件引用
    第六章 组件 65-66 组件案例-发表评论功能的实现
    第六章 组件 63 组件传值-父组件向子组件传值和data与props的区别
    第六章 组件 62 组件-组件定义方式的复习
    第六章 组件 61 动画-小球动画flag标识符的作用分析
    第六章 组件 60 组件切换-应用切换动画和mode方式
    第六章 组件 59 组件切换-使用Vue提供的component元素实现组件切换
    vscode代码格式化 空格的配置
    vim配置C++开发环境 win10
  • 原文地址:https://www.cnblogs.com/gxlaqj/p/11415685.html
Copyright © 2011-2022 走看看