Interceptor de URL global de configuración SpringBoot (juicio de inicio de sesión)
Definir el interceptor: implementar la clase HandlerInterceptor y reescribir tres métodos
- Utilizo la información del usuario en la sesión para determinar si he iniciado sesión. Cuando no estoy conectado, lanzo una excepción personalizada NoLoginException y luego voy a la clase de manejo de excepciones globales para capturar esta excepción y procesarla. Sin mencionar la clase de excepción global, el blog anterior sobre el manejo de excepciones globales.
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());
}
}
ConfiguraciónWebMvcConfigurer
- Si configura druid, swagger y otras interfaces de carga de archivos, debe liberar aquí
@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"
);
}
}
En resumen, la implementación es relativamente simple, consulte la dirección de la nube de código https://gitee.com/Marlon_Brando/back.git para obtener más detalles