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 表示拦截器校验失败,不会往下执行
@Override
public 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 { // 使用这个接口中的方法把自定义拦截器添加到项目配置中
@Autowired
private LoginInterceptor loginInterceptor;
// 添加拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor) // registry 是一个注册器,往里面添加自定义的拦截器
.addPathPatterns("/**") // 所有的 url 都会进行拦截判断
.excludePathPatterns("/user/login") // 设置不进行拦截的 url
.excludePathPatterns("/user/reg");
}
}
运行结果: