SpringBoot 配置全局的URL拦截器(登录判断)
定义拦截器:实现HandlerInterceptor类,重写三个方法
- 我通过session中的用户信息去判断是否已经登录,当没有登录的时候,抛出NoLoginException自定义异常,然后到全局 的异常处理类中,捕获这个异常,对它进行处理。全局异常类就不说了,之前的全局异常处理那篇博客说了。
public class UrllInterceptor extends BaseController implements HandlerInterceptor {
private Logger logger= Logger.getLogger(UrllInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
CurrentUser currentUser = getCurrentUser(request);
String requestURI = request.getRequestURI();
if(requestURI.contains("/login")){
return true;
} else if(currentUser==null){
logger.info("==========当前用户没有登录");
response.setStatus(201);
// 抛出没有登录的异常,在全局异常中进行处理
throw new NoLoginException("没有登录请重新登录!");
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
logger.info("==========请求Url:"+request.getRequestURL()+" "+"==========请求状态:"+response.getStatus());
}
}
配置WebMvcConfigurer
- 如果配置了druid、swagger等文件上传等接口的时候,需要在这里进行放行
@Configuration
public class UrlConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//注册TestInterceptor拦截器
InterceptorRegistration registration = registry.addInterceptor(new UrllInterceptor());
registration.addPathPatterns("/**"); //所有路径都被拦截
registration.excludePathPatterns( //添加不拦截路径
"你的登陆路径", //登录
"/**/*.html", //html静态资源
"/**/*.js", //js静态资源
"/**/*.css", //css静态资源
"/**/*.woff",
"/**/*.ttf"
);
}
}
总之实现比较简单,详细可见码云地址https://gitee.com/Marlon_Brando/back.git