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
        }
    
    }
  • 相关阅读:
    解决移动端页面在苹果端滑不到底部的问题
    js点击事件在苹果端失效的问题
    小程序开发基本步骤
    css多行文本省略号(...)
    js判断pc端和移动端的方法
    主流浏览器css兼容问题的总结
    让ie6对png透明图片支持起来
    ajax的探究与使用
    css3实现逐渐变大的圆填充div背景的效果
    js中setTimeout()时间参数设置为0的探讨
  • 原文地址:https://www.cnblogs.com/gxlaqj/p/11415685.html
Copyright © 2011-2022 走看看