一、定义拦截器
public class loginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object obj=request.getSession().getAttribute("username");
//获取session
if(obj==null){
//用户未登录
request.getRequestDispatcher("/").forward(request,response);
//返回到根目录的映射
return false;
}else{
//用户登录,放行
return true;
}
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
二、在mvc配置文件中加入拦截器组件
@Configuration
public class MyConfig extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new loginInterceptor()).addPathPatterns("/**").
excludePathPatterns("/","/index.html","/user/login");
}
addPathPatterns :添加拦截的目标位置
不需要考虑静态文件的拦截问题,因为springboot已经帮我们配置好了
excludePathPatterns :添加拦截器的白名单
白名单一定要配置拦截器的返回路径,否则springboot自动会在运行时报错
黑名单一定要配置登录组件的路径,否则会进入无限循环
现象:除了"/","/index.html"这两个路径之外,用户在没有登陆状态下访问的任何界面都会返回到登录界面