1. 自定义拦截器
(解决请求拦截和session登录的问题)
实现HandlerInterceptor接口来定义一个拦截器,通过拦截器的处理逻辑返回true(放行)或false(被拦截)
@Configuration
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
UserInfo user = (UserInfo) request.getSession().getAttribute("userinfo");
if( user!=null){
return true;
}else {
request.getRequestDispatcher("/index").forward(request,response);
return false;
}
}
}
2. 配置拦截器实现HandlerInterceptor
(解决前后端分离时的跨域问题)
public class CorsInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
response.setHeader("Access-Control-Allow-Origin", "*"); // 允许所有域名跨域访问
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); // 允许的请求方法
response.setHeader("Access-Control-Allow-Headers", "Content-Type"); // 允许的请求头
return true;
}
}
3. 配置WebConfig类
实现WebMvcConfigurer 来实现springboot程序的Web配置
其中 addPathPatterns 为需要拦截的请求 ,excludePathPatterns为排除的,不需要拦截的请求
通过 **registry.addInterceptor(new 自定义拦截器)**来加入拦截配置
不要忘记加上@Configuration注解
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//addPathPatterns拦截的路径
String[] addPathPatterns = {
"/**"
};
//excludePathPatterns排除的路径
String[] excludePathPatterns = {
"/css/**", "/js/**", "/fonts/**", "/index", "/login", "/websocket", "/json/**", "/api/**
"/images/**", "fonts/**",
};
//创建用户拦截器对象并指定其拦截的路径和排除的路径
registry.addInterceptor(new MyInterceptor()).addPathPatterns(addPathPatterns).excludePathPatterns(excludePathPatterns);
registry.addInterceptor(new CorsInterceptor());
}