拦截器概念

拦截的是controller(不会去拦截jsp文件,过滤器才会拦截jsp文件),AOP的功能体现

拦截器的实现(与过滤器类似)

创建一个拦截器


配置拦截器要拦截的对象

1
2
3
4
5
6
7
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<ref bean="myInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>

测试


案例应用:登录拦截

编写拦截方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
* 进入Handler方法之前执行:权限身份验证
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
System.out.println("preHandle:进入Handler方法之前执行:权限身份验证");

String url = request.getRequestURI();

//如果这url包含login.action则通过拦截器
if(url.indexOf("login.action")>=0) {
return true;
}

//查看session是否有用户登录过,如果登录过就让请求通过
HttpSession session = request.getSession();
String msg = (String) session.getAttribute("msg");
if(msg != null && msg.equals("登录成功!")) {
return true;
}

//如果没有登录则重新请求转发到登录页面
request.getRequestDispatcher("login.jsp").forward(request, response);

//true表示通过拦截器,false表示没有通过拦截器
return false;
}

编写测试页面

1
2
3
4
5
6
7
8
9
10
11
12
13
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录页面</title>
</head>
<body>
<form action="login.action" method="post">
用户名:<input type="text" name="name"/><br>
密码:<input type="password" name="password"/><br>
<input type="submit"/>
</form>
</body>
</html>

编写测试controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package controller;

import javax.servlet.http.HttpSession;

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

import entity.User;

@Controller
public class LoginController {
@RequestMapping(value="/login.action")
public String login(User user,HttpSession session, Model model) {
if("admin".equals(user.getName()) && "123".equals(user.getPassword())) {
System.out.println("登录成功!");
session.setAttribute("msg", "登录成功!");
model.addAttribute("result","登录成功!");
}else {
System.out.println("登录失败!");
session.setAttribute("msg", "登录失败!");
model.addAttribute("result","登录失败!");
}
return "success";
}
}

ps:因作者能力有限,有错误的地方请见谅

  • 喜欢这篇文章的话可以用快捷键 Ctrl + D 来收藏本页

最后更新: 2018年09月19日 16:01

原始链接: https://blog.hdqyf.club/2018/05/16/20180516-SpringMVC深入—拦截器/

× 请我吃糖~
打赏二维码