1.拦截器-Interceptor
1.1拦截器概念
拦截器(Interceptor):是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行。在SpringBoot中,拦截器是开发的常用手段,要用来登录验证、性能检查、日志记录等
(1)SpringBoot中拦截器实现的基本步骤:
- 编写一个拦截器实现 HandlerInterceptor 接口
- 拦截器注册到配置类中(实现 WebMvcConfigurer 的 addInterceptors)
- 指定拦截规则
(2)拦截器执行顺序
- preHandle()
- if return true
- controller
- postHandle()
- afterCompletion()
- else-if return false
- 结束
1.2应用实例
演示:使用拦截器防止用户非法登录。以day08-2中的综合案例为例子,之前是使用session校验用户有没有登录过,现在使用拦截器统一校验:浏览器输入地址请求某个页面,如果此前用户没有登录过,就返回登录页面,并提示信息。
(1)创建拦截器LoginInterceptor.java
package com.li.thymeleaf.interceptor; |
|
import lombok.extern.slf4j.Slf4j; |
|
import org.springframework.web.servlet.HandlerInterceptor; |
|
import org.springframework.web.servlet.ModelAndView; |
|
import javax.servlet.http.HttpServletRequest; |
|
import javax.servlet.http.HttpServletResponse; |
|
/** |
|
* @author 李 |
|
* @version 1.0 |
|
*/ |
|
@Slf4j |
|
public class LoginInterceptor implements HandlerInterceptor {
|
|
/** |
|
* preHandle在目标方法执行前被调用 |
|
* @param request |
|
* @param response |
|
* @param handler |
|
* @return |
|
* @throws Exception |
|
*/ |
|
@Override |
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
|
String requestURI = request.getRequestURI(); |
|
log.info("preHandle()拦截到的URI=" + requestURI); |
|
//进行登录校验 |
|
Object loginAdmin = request.getSession().getAttribute("loginAdmin"); |
|
if (null != loginAdmin) {//成功登录过 |
|
//放行 |
|
return true; |
|
} |
|
//没有登录过 |
|
request.setAttribute("msg", "没有登录过,请登录!"); |
|
request.getRequestDispatcher("/login").forward(request, response); |
|
return false; |
|
} |
|
@Override |
|
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
|
|
log.info("postHandle()被执行..."); |
|
} |
|
@Override |
|
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
|