登录检查与静态资源放行
编写一个拦截器,实现 HandlerInterceptor 接口
public class LoginInterceptor implements HandlerInterceptor {
/**
* 目标方法执行之前
*
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestURI = request.getRequestURI();
log.info("拦截的请求路径是{}", requestURI);
// 登录检查逻辑
HttpSession session = request.getSession();
if (session.getAttribute("loginUser") != null) {
return true;
}
log.info("有请求被拦截了");
//跳转到登录页
session.setAttribute("msg", "请先登录");
response.sendRedirect("/");
return false;
}
拦截器注册到容器中,并指定拦截规则
实现 WebMvcConfigurer 的 addInterceptors 方法
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
/**
* 拦截器
*
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
// /** 拦截所有的请求
registry.addInterceptor(new LoginInterceptor()).
addPathPatterns("/**").
excludePathPatterns(
"/",
"/login",
"/css/**",
"/js/**",
"/fonts/**",
"/images/**"
);
}
}
放行静态资源的2种方案
1、挨个儿放行 /css、/js、/fonts、/images 等静态资源请求前缀
好处是不需要改动模板文件,只需要在配置拦截器时多添加几条规则即可。
2、配置静态资源访问路径前缀,然后放行前缀
spring:
mvc:
static-path-pattern: /static/**