- 1、编写一个拦截器实现HandlerInterceptor接口
- 2、拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors)
- 3、指定拦截规则如果拦截所有 静态资源也会被拦截
首先定义一个拦截器
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
Object loginUser = session.getAttribute("loginUser");
if (loginUser != null){
// 放行
return true;
}
// 拦截住,跳转到登录页
response.sendRedirect("/");
return false;
}
@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 {
}
}
重写preHandle获取session判断是否登录没有登录的重定向到登录页面
再去WebMvcConfigurer进行注册
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor()).
addPathPatterns("/**"). // 所有请求都会被拦截包括静态资源
excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**");
}
}
注意的是如果配置addPathPatterns(“/**”)是会拦截所有的请求的此时你登录页面的使用的css和js也是会被拦截的所以你需要去排除他们