1、/** 代表扫描根目录以及子目录下所有的文件 /* 表示只扫描当前路径
2、如果拦截器中配置的拦截路径是/**,则会把静态资源也拦截了,所以处理方式如下:
● Debug 模式下查看,发现处理静态资源的handler是 ResourceHttpRequestHandler,实现的接口为HttpRequestHandler
● 方式一:判断 handler 是不是 ResourceHttpRequestHandler 的一个实例,如果是,则放行,return true;
● 方式二:判断 handler 是不是 HttpRequestHandler的一个实例,如果是,则放行,return true;
@Bean
public WebMvcConfigurer webMvcConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("/login");
registry.addViewController("/login.html").setViewName("/login");
registry.addViewController("/dashboard.html").setViewName("/dashboard");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new HandlerInterceptorAdapter() {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
LOGGER.info("RequestURL:{}, handler:{}", request.getRequestURL(), handler.getClass());
// 处理静态资源 ResourceHttpRequestHandler HttpRequestHandler
if (HttpRequestHandler.class.isInstance(handler)) {
return true;
}
Object loginUser = request.getSession().getAttribute("loginUser");
Cookie[] cookies = request.getCookies();
LOGGER.info("cookies:{}", Arrays.toString(cookies));
if (Objects.isNull(loginUser)) {
request.setAttribute("msg", "没有权限请先登陆");
request.getRequestDispatcher("/login.html").forward(request, response);
return false;
}
return true;
}
// /** 代表扫描根目录以及子目录下所有的文件 /* 表示只扫描当前路径
}).addPathPatterns("/**").excludePathPatterns("/login.html", "/", "/user/login");
}
};
}
网友评论