Spring mvc拦截器实现原理解析

2020-03-19 16:02:33于丽

前端 index.jsp

<a href="${pageContext.request.contextPath}/interceptor" rel="external nofollow" >拦截器测试</a>

启动tomcat 测试一下!

验证用户是否登陆(认证用户)

实现思路

有一个登陆页面,需要写一个controller访问页面。

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

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

代码编写

编写一个登陆页面 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>

编写一个Controller处理请求

package com.xiaohua.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpSession;

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

  //跳转到登陆页面
  @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";
  }
}

编写一个登陆成功的页面 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" rel="external nofollow" >注销</a>
</body>
</html>

在 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" rel="external nofollow" >登录</a>
 <a href="${pageContext.request.contextPath}/user/jumpSuccess" rel="external nofollow" >成功页面</a>
 </body>
</html>