SpringBoot配置拦截器
1. 编写需要处理的拦截条件
// 登录拦截器
// 处理拦截的操作
@Component
public class LoginCheckInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 1.获取session中的ESSION_EMPLOYEE
Employee employee = (Employee) request.getSession().getAttribute("SESSION_EMPLOYEE");
// 2.判断用户信息是否存在
if (employee != null){
// 登录了-放行
return true;
} else {
// 注解了@RestController,Spring会自动将返回结果转换成JSON,所以这里需要借助工具转换JSON,并返回给前端
String json = JSON.toJSONString(ResultInfo.error("NOTLOGIN")); // 前端拦截器收到"NOTLOGIN"进行判断,然后再跳转首页
response.getWriter().write(json); // 发给浏览器
// 未登录-拦截
return false;
}
}
}
2.注册这个拦截器
/**
* 在Springboot项目中,默认静态资源的存放目录为:"classpath:/resources/", "classpath:/static/", "classpath:/public/"
* 本项目中静态资源存放在backend目录中, 那么这个时候要想访问到静态资源,就需要设置静态资源映射。
*/
//web相关配置
@Configuration
public class ReggieWebMvcConfig implements WebMvcConfigurer {
@Autowired
private LoginCheckInterceptor loginCheckInterceptor;
public void addInterceptors(InterceptorRegistry registry){
//定义放行路径
ArrayList<String> urls = new ArrayList<>();
urls.add("/backend/**");// 管理系统静态资源
urls.add("/error");// 错误请求
urls.add("/employee/login");// 登录请求
urls.add("/employee/logout");// 退出请求
registry.addInterceptor(loginCheckInterceptor)
.addPathPatterns("/**") // 拦截所有路径
.excludePathPatterns(urls); // 放行的路径
}
//设置静态资源映射
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//当访问请求是/backend/**时,去classpath:/backend/寻找对应资源
registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
}
}