SpringMVC学习16:验证用户是否登录/拦截器

SpringMVC学习16:验证用户是否登录/拦截器

  • 验证用户是否登录:实现思路

    • 1,有一个登录页面,需要写一个controller访问页面;

    • 2,登录页面又一提交表单的动作,需要在controller中处理,判断用户名密码是否正确,如果正确,向session中写入用户信息,返回登录成功;

    • 3,拦截用户请求,判断用户是否登录,如果用户已经登录,放行,如果用户未登录,跳转到登录页面;

       

 

  • 测试:

    • 编写一个登录页面:login.jsp

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
        <title>Title</title>
      </head>

      <h1>登录页面</h1>
      <hr>

      <body>
      <form action="${pageContext.request.contextPath}/user/login">
      用户名:<input type="text" name="username"> <br>
      密码:<input type="password" name="pwd"> <br>
        <input type="submit" value="提交">
      </form>
      </body>
      </html>
    • 2、编写一个Controller处理请求

      @Controller
      @RequestMapping("/user")
      public class TestController {

         //跳转到登陆页面
         @RequestMapping("/jumplogin")
         public String jumpLogin() throws Exception {
             return "login";
        }

         //跳转到成功页面
         @RequestMapping("/jumpSuccess")
         public String jumpSuccess() throws Exception {
             return "success";
        }

         //登陆提交
         @RequestMapping("/login")
         public String login(HttpSession session, String username, String pwd) throws Exception {
             // 向session记录用户身份信息
             System.out.println("接收前端==="+username);
             session.setAttribute("user", username);
             return "success";
        }

         //退出登陆
         @RequestMapping("logout")
         public String logout(HttpSession session) throws Exception {
             // session 过期
             session.invalidate();
             return "login";
        }

      }
    • 3,编写一个登陆成功的页面 success.jsp

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
        <title>Title</title>
      </head>
      <body>

      <h1>登录成功页面</h1>
      <hr>

      ${user}
      <a href="${pageContext.request.contextPath}/user/logout">注销</a>
      </body>
      </html>
    • 4、在 index 页面上测试跳转!启动Tomcat 测试,未登录也可以进入主页!

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
        <title>$Title$</title>
      </head>
      <body>
      <h1>首页</h1>
      <hr>
      <%--登录--%>
      <a href="${pageContext.request.contextPath}/user/jumplogin">登录</a>
      <a href="${pageContext.request.contextPath}/user/jumpSuccess">成功页面</a>
      </body>
      </html>
    • 5、编写用户登录拦截器:自定义拦截器

      public class MyInterceptor  implements HandlerInterceptor  {


         //在请求处理的方法之前执行
         //如果返回true执行下一个拦截器
         //如果返回false就不执行下一个拦截器
         public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
             // 如果是登陆页面则放行
             System.out.println("uri: " + request.getRequestURI());
             if (request.getRequestURI().contains("login")) {
                 return true;
            }

             HttpSession session = request.getSession();

             // 如果用户已登陆也放行
             if (session.getAttribute("user") != null) {
                 return true;
            }
             // 用户没有登陆跳转到登陆页面
             request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
             return false;

        }

      }
    • 6、在Springmvc的配置文件中注册拦截器:只需要/user下面的访问拦截即可;【重点】

      <!--配置拦截器-->
         <mvc:interceptors>
             <mvc:interceptor>
                 <mvc:mapping path="/user/**"/>
                 <!--bean配置的就是拦截器-->
                 <bean class="com.ljxdemo.controller.MyInterceptor"/>
             </mvc:interceptor>
         </mvc:interceptors>

 

 

  • 笔记:

    • 在WEB-INF下的所有页面或者资源,只能通过controller或者servlet访问;

    • 转发不会修改URL地址;

 

 

posted @   gzs1024  阅读(407)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示