java吧 关注:1,294,041贴子:12,826,561

Hibernate.06 JSP Filter

取消只看楼主收藏回复

要求是验证用户在访问某些页面的时候,判断用户是否已经登录。
如果登录则允许访问。
否则跳转到登录页面。
ps:这是我刚完成的一章的作业。


1楼2012-09-10 21:33回复
    1.打开myeclipse右键新建一个web项目
    并且取名为FilterDemo
    如下图:


    4楼2012-09-10 21:37
    回复
      2026-01-09 19:05:19
      广告
      不感兴趣
      开通SVIP免广告
      2.1
      新建一个登录页面(login.jsp)
      2.2
      在index.jsp页面中定向到登录页面中。
      2.3
      在WebRoot目录下面新建一个包(test)
      并且在test包目录下面添加一张test.jsp
      如下图所示:

      


      5楼2012-09-10 21:43
      回复
        3.在src目录下面新建一个包(com.bean(什么都行))
        添加一个class类(EncodingFilter)
        注意:本类是用来设置编码。
        添加一个class类(SecurityFilter(重点))
        注意:本类是用来判断,当用户在访问某些页面的时候是否已经登录(等)...
        ps:我只是用来完成判断用户是否登录。


        6楼2012-09-10 21:48
        回复



          7楼2012-09-10 21:50
          回复
            4.
            开始编码
            4.1
            EncodingFilter类implements实现接口import javax.servlet.Filter;
            在doFilter方法中设置编码.
            request.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("UTF-8");
            //放他走
            chain.doFilter(request, response);
            如下图:

            


            8楼2012-09-10 21:54
            回复
              4.2(重点)
              EncodingFilter类implements实现接口import javax.servlet.Filter;
              //在doFilter类中完成判断
              //1.构建request和response变量
              HttpServletRequest req=(HttpServletRequest)request;
              HttpServletResponse res=(HttpServletResponse)response;
              //2.构建session对象
              HttpSession session = req.getSession(true);
              //3.从session里取到用户名信息
              String username=(String)session.getAttribute("username");
              //4.进行判断用户是否已经登录
              if(username==null || "".equals(username)){
              //如果没有登录则返回到登录页面
              res.sendRedirect("../login.jsp");
              }else{
              //已经登录则继续进行请求
              chain.doFilter(req, res);
              }


              10楼2012-09-10 21:58
              回复
                如图:



                12楼2012-09-10 22:00
                回复
                  2026-01-09 18:59:19
                  广告
                  不感兴趣
                  开通SVIP免广告
                  5.在web.xml配置文件添加filter进去
                  让它生效。
                  5.1
                  在web.xml添加如下代码
                  <!-- 使用的过滤器 -->
                  <filter>
                  <filter-name>EncodingFilter</filter-name>
                  <filter-class>com.bean.EncodingFilter</filter-class>
                  </filter>
                  <!-- 服务器把哪些请求交给过滤器处理。 -->
                  <filter-mapping>
                  <filter-name>EncodingFilter</filter-name>
                  <url-pattern>/*</url-pattern>
                  </filter-mapping>
                  <!--/表示根路径,*(星号)代表所有请求,加在一起就变成了根路径下的所有请求。
                  这样,所有的请求都会先被EncodingFilter拦截,并在请求里设置上指定的编码。 -->
                  <filter>
                  <filter-name>SecurityFilter</filter-name>
                  <filter-class>com.bean.SecurityFilter</filter-class>
                  </filter>
                  <filter-mapping>
                  <filter-name>SecurityFilter</filter-name>
                  <!--这里代表的是在test目录下面所有操作-->
                  <url-pattern>/test/*</url-pattern>
                  </filter-mapping>
                  


                  13楼2012-09-10 22:08
                  回复



                    14楼2012-09-10 22:09
                    回复
                      5.2
                      在src目录下面新建一个包(com.servlet(放servlet的地方))
                      添加一个Servlet(LoginAction)
                      编写查询代码:
                      HttpSession session = request.getSession(true);
                      System.out.println(request.getParameter("username"));
                      if (request.getParameter("username").equals("test")) {
                      session.setAttribute("username", request.getParameter("username"));
                      request.getRequestDispatcher("test/test.jsp").forward(request, response);
                      }else{
                      request.setAttribute("logErr", "用户名不正确!");
                      request.getRequestDispatcher("login.jsp").forward(request, response);
                      }
                      ps:我这里只是判断是否登录而已。
                      因此只要用户名为test就可以了。
                      实际中应该从数据库中查询。


                      15楼2012-09-10 22:13
                      回复



                        16楼2012-09-10 22:14
                        回复
                          5.3
                          longin.jsp代码如下



                          17楼2012-09-10 22:15
                          回复
                            6.测试。


                            18楼2012-09-10 22:18
                            回复
                              2026-01-09 18:53:19
                              广告
                              不感兴趣
                              开通SVIP免广告
                              好的。
                              我的测试是成功的。
                              如果输入非test的值就会重新回到本页面并且提示用户名有误。
                              如果是正确的就可以进入test目录下面访问test.jsp


                              19楼2012-09-10 22:20
                              回复