用过滤器 +Session 会话权限控制详解

本文详细介绍了如何结合过滤器和Session进行会话权限控制。首先,在UserServlet中,当用户成功登录后将用户信息存入Session。然后,通过过滤器检查请求,若未登录则重定向到登录页面。在过滤器中获取URL并控制权限,可以通过ServletRequest对象访问请求信息,并利用FilterChain调用后续处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用过滤器 +Session 会话权限控制详解

一、登陆后在UserServlet绑定session

代码如下:

                       if ("login".equals(op)) {
            String userid = request.getParameter("name");
            String pwd = request.getParameter("pwd");
            user.setEuUserId(userid);
            user.setEuPassword(pwd);
            EasybuyUser user2 = ub.login(user);
            if (user2 == null) {
                request.setAttribute("error", "登录失败");
                request.getRequestDispatcher("index.jsp").forward(request,
                        response);
            } else {
                session.setAttribute("user", user2);
                request.setAttribute("user" ,user2);
                request.getRequestDispatcher("main.jsp").forward(request, response);
            }

        }

二、在过滤器获取url控制权限

代码如下:

       

public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        //强转 得到HttpServletRequest 和  HttpServletResponse
        HttpServletRequest request = (HttpServletRequest) arg0;
        HttpServletResponse response = (HttpServletResponse) arg1;
        HttpSession session = request.getSession();
        //获得url eg:RoleServlet?op=torolelist
        String url = request.getServletPath() + "?" + request.getQueryString();
        //System.out.println(url);
        //判断:排除筛选首页和提交登陆页

        if (!"/index.jsp?null".equals(url) && !"/UserServlt?op=login".equals(url)) {
            //session中存入user
            if (session.getAttribute("user") == null) {

                request.setAttribute("error", "请登录");

                request.getRequestDispatcher("index.jsp").forward(request,
                        response);
            } else {
                arg2.doFilter(request, response);
            }

        } else {

            arg2.doFilter(request, response);
        }

    }

  1.   /**  
  2.    * 1,doFilter的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括    
  3.    * 表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过    
  4.    * 滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。  
  5.    */

三、在过滤器中获得url的几种方式:

       假定你的web application 名称为news,你在浏览器中输入请求路径: 

       http://localhost:8080/news/main/list.jsp 

     则执行下面向行代码后打印出如下结果:

    1、 System.out.println(request.getContextPath()); 

     打印结果:/news 
   2、System.out.println(request.getServletPath()); 

     打印结果:/main/list.jsp 
   3、 System.out.println(request.getRequestURI()); 

     打印结果:/news/main/list.jsp 
   4、 System.out.println(request.getRealPath("/"));  

    打印结果: F:\Tomcat 6.0\webapps\news\test
     eg:RoleServlet?op=torolelist
   5. request.getQueryString()
     打印结果:op=torolelist

    所以:request.getServletPath() + "?" + request.getQueryString()      
         打印结果:RoleServlet?op=torolelist

            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值