spring boot 拦截器的实现需要有两步:
自定义一个拦截器
package com.example.demo.common;import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;@Component
public class LoginInterceptor implements HandlerInterceptor { // 继承这个接口表示当前是一个自定义拦截器// 生成重写代码,此方法表示在目标方法前调用,返回的是一个 boolean 类型的// 返回 true 表示拦截器校验成功,正常执行// 返回 false 表示拦截器校验失败,不会往下执行@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 判断用户是否登录HttpSession session = request.getSession(false);if (session != null && session.getAttribute("session_userinfo") != null) {// 说明用户已经登陆return true;}// 用户没登陆就设置一个 401 状态码,不然就是一个空白页面response.setStatus(401);return false;}
}
将拦截器设置到配置项中,并设定拦截规则
package com.example.demo.config;import com.example.demo.common.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class LoginConfig implements WebMvcConfigurer { // 使用这个接口中的方法把自定义拦截器添加到项目配置中@Autowiredprivate LoginInterceptor loginInterceptor;// 添加拦截器@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor) // registry 是一个注册器,往里面添加自定义的拦截器.addPathPatterns("/**") // 所有的 url 都会进行拦截判断.excludePathPatterns("/user/login") // 设置不进行拦截的 url.excludePathPatterns("/user/reg");}
}
运行结果: