SpringBoot之HandlerInterceptor拦截器的使用

使用步骤 : 自定义一个拦截器类 并实现 HandlerInterceptor 接口


boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception;

void postHandle(
HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception;

void afterCompletion(
HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception;

preHandle:在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理;

postHandle:在业务处理器处理请求执行完成后,生成视图之前执行。后处理(调用了Service并返回ModelAndView,但未进行页面渲染),有机会修改ModelAndView (这个博主就基本不怎么用了);

afterCompletion:在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面);

判断是否登录检查逻辑

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//登录检查逻辑
HttpSession session=request.getSession();
Object loginUser=session.getAttribute("loginUser");
if (loginUser != null) {
return true;
}
//拦截
session.setAttribute("msg","没登录别想访问别的东西!!");
response.sendRedirect("/"); //跳转到登录页

return false;
}

添加拦截器到容器 并配置拦截规则

  • 知识点 WebMvcConfigurer

WebMvcConfigurer配置类其实是Spring内部的一种配置方式,采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制,可以自定义一些Handler,Interceptor,ViewResolver,MessageConverter。基于java-based方式的spring mvc配置,需要创建一个配置类并实现**WebMvcConfigurer** 接口;

在Spring Boot 1.5版本都是靠重写WebMvcConfigurerAdapter的方法来添加自定义拦截器,消息转换器等。SpringBoot 2.0 后,该类被标记为@Deprecated(弃用)。官方推荐直接实现WebMvcConfigurer或者直接继承WebMvcConfigurationSupport,方式一实现WebMvcConfigurer接口(推荐),方式二继承WebMvcConfigurationSupport类

点我跳转到详细文章链接

package com.manager.demo.config;

import com.manager.demo.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
* Created with IntelliJ IDEA.
*
* @author: 风离
* @Date: 2021/07/15/15:32
* @Description:
* - WebMvcConfigurer
* - /** 所有路径
* - addPathPatterns : 添加拦截路径
* - excludePathPatterns : 那些路径资源放行
*/
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
@Override //添加拦截器 并放行静态资源
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/**").excludePathPatterns("/","/login",
"/css/**","/fonts/**","/images/**","/js/**"
);
}
}