zoukankan      html  css  js  c++  java
  • JavaWeb 过滤器——验证登录 防止未登录进入界面

    昨天刚刚完成老师布置的一个Web小项目,项目中用到了两个过滤器(编码过滤、登录过滤)

    比如电商网页中有些不需要登录也能访问(首页、商品详细信息...),其他都需要过滤在会话作用域(session)中是否含有个人信息对象

    示例代码:

    package com.star.miniShop.Filter;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    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.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebFilter("/*")
    public class LoginFiter implements Filter{
      //实例化一个静态的集合(这里可以改用map集合,提高性能,每次过滤可以不用for匹配)
        private static List<String> urls = new ArrayList<>();
        //静态代码块中向集合中存放所有可以放行的请求或网页地址(不用账号密码即可访问)
        static {
            urls.add("/logining");
            urls.add("/shopLogin.html");
            urls.add("/css");
            urls.add("/js");
            urls.add("/images");
            urls.add("/shopHome.html");
            urls.add("/HomeShop");
            urls.add("/Searchs");
            urls.add("/regist");
            urls.add("/shopRegist.html");
        }
        
        @Override
        public void destroy() {
            // TODO Auto-generated method stub
            
        }
        
    
    /**
    * 拦截请求,看看用户是否登陆,如果没有登陆,
    * 则跳转回登录页面,否则就放行
    */
    
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
          //注意:ServletRequest是HttpServletRequest父接口,因此需要强转
          //同样,ServletResponse是HttpServletResponse父接口,因此需要强转
    
            HttpServletRequest req=(HttpServletRequest)request;
            HttpServletResponse res=(HttpServletResponse)response; 
          //得到当前页面所在目录下全名称
            String urlPattern=req.getServletPath();
          //得到页面所在服务器的绝对路径
            String path = req.getRequestURI();
            //System.out.println(urlPattern);
            for (String url : urls) {
                if(url.equals(urlPattern) || path.contains(url)) {
            //        System.out.println("reaource do chain...");
                    chain.doFilter(request, response);
                    //防止重复响应
                    return;
                }
            }
            //如果person为null,表示没有登录
            if(req.getSession().getAttribute("person")==null) {
                res.sendRedirect("shopLogin.html");
            }else { 
                //放行
                chain.doFilter(request, response);
            }
        }
    
        @Override
        public void init(FilterConfig arg0) throws ServletException {
            // TODO Auto-generated method stub
            
        }
    
    }
  • 相关阅读:
    javascript中万恶的function
    Windows7下如何安装部署秋色园CYQBlog源码V1.0网站
    Extjs2.2:Panel里面嵌入Excel表格
    Extjs做界面很酷;感谢博客园给我一个展示的机会;借此向大家展示一下EXTJS的魅力
    16Aspx.com改进版Extjs简单版酒店管理系统提供下载!
    Ext2.2+ASP.NET开发框架已完成欢迎大家下载!
    Extj+Asp.net开发框架V1.1树的操作
    Ext2.2程序开发实战(1)登录界面
    扩展欧几里得定理
    C语言 统计整数二进制表示中1的个数
  • 原文地址:https://www.cnblogs.com/hhmm99/p/9368162.html
Copyright © 2011-2022 走看看