1、引入依赖(该实例引入thymeleaf技术,方便返回页面的时候映射templates文件夹下面的文件)
<!-- 想要映射templates文件夹下面的文件必须需要入thymeleaf技术 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2、编写拦截器方法(实现HandlerInterceptor接口,并实现其中的三个方法)
package com.ltj.demo.Interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Interceptor1 implements HandlerInterceptor {
/**
* 在拦截器执行之前执行
*
* @param request
* @param response
* @param handler
* @return 只有该实现方法有返回值,该返回值为false这不执行拦截下面的所有代码
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("i am preHandle");
return true;
// return false; //设置为false则将该拦截器一下的代码均不执行,直接返回页面
}
/**
* 在拦截器执行完成后才执行
*
* @param request
* @param response
* @param handler
* @param ex
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("i am afterCompletion");
}
/**
* 在执行器拦截之后才执行
* modelAndView该参数可以改变返回的页面参数等的信息
*
* @param request
* @param response
* @param handler
* @param mav
* @throws Exception
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mav)
throws Exception {
System.out.println("i am posthandle");
/**
* 在该拦截器中使用该ModelAndView接口,拦截的类必须实现该ModelAndView的接口并返回到页面
*
* 该拦截器设置的ViewName优先级高于拦截类的ViewName
*
*/
mav.setViewName("/interceptorPage1.html");
}
}
3、注册拦截器,添加拦截路径
package com.ltj.demo.Configuration;
import com.ltj.demo.Interceptor.Interceptor1;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 添加拦截器,并添加@Configuration注解
*
* WebMvcConfigurerAdapter接口已经设置为过期(Deprecated),不建议使用
* 可以实现其父接口WebMvcConfigurer
*/
@Configuration
public class interceptorConfigration implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//添加拦截器,addPathPatterns为添加拦截的方法
registry.addInterceptor(new Interceptor1())
.addPathPatterns("/test/Interceptor/testByAdmin");
// .addPathPatterns(""); //可以继续添加多个拦截路径
}
}
4、创建静态页面放入到resources\templates路径下
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Index</title>
</head>
<body>
<div>
<form method="post" action="/test/Interceptor/testByAdmin">
账号:<input style="" name="userName" type="text"/><br/>
密码:<input name="passWord" type="password"/><br/><br/>
<input type="submit"/>
</form>
</div>
</body>
</html>
interceptorPage.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>拦截器页面</title>
</head>
<body>
<b>我是拦截页面</b>
<a href="index.html" target="_self"/>
</body>
</html>
interceptorPage1.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>拦截器页面1</title>
</head>
<body>
<b>我是拦截页面1</b>
<a href="index.html" target="_self"/>
</body>
</html>
5、添加测试Controller
package com.ltj.demo.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Controller
@RequestMapping("/test/Interceptor")
public class InterceptorController {
@RequestMapping("/testInterceptor")
public String testInterceptor(){
return "index.html";
}
/**
* 该类实现了拦截器的功能,postHandle该方法实现了ModelAndView类,
* 该拦截的方法就必须要有返回ModelAndView对象,否则报错
*
* @param req
* @param resp
* @param mav
* @return
*/
@RequestMapping("/testByAdmin")
public ModelAndView testByAdmin(HttpServletRequest req, HttpServletResponse resp, ModelAndView mav){
//获取前端传输过来的值
String userName = req.getParameter("userName");
String passWord = req.getParameter("passWord");
System.out.println(userName + "-----" + passWord);
//拦截器的ModelAndView优先级高于该方法内的ModelAndView
mav.setViewName("/interceptorPage.html");
return mav;
}
}
测试地址:http://localhost:8080/test/Interceptor/testInterceptor
前端页面输入值:
账号:123456
密码:123456
后台输出值:
页面跳转