1. 定义拦截器
在Interceptor包下新建LoginInterceptor类
/**
* 定义一个拦截器
*/
public class LoginInterceptor implements HandlerInterceptor {
/**
* 检测全局session对象是否有uid数据,有则放行,无则重定向到登录页面
* @param request 请求对象
* @param response 响应对象
* @param handler 处理器(url+controller:映射)
* @return true则放行 false则拦截
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// HttpServletRequest可以获取session对象
Object obj = request.getSession().getAttribute("uid");
if (obj == null) {// 用户未登陆 重定向
response.sendRedirect("/web/login.html");
// 结束后续的调用
return false;
}
// 放行
return true;
}
}
2. 处理拦截器的注册
在config包下新建LoginInterceptorConfigurer类
/**
* 处理器拦截器的注册
*/
@Configuration // 加载当前拦截器并进行注册
public class LoginInterceptorConfigurer implements WebMvcConfigurer {
// 创建自定义拦截器
HandlerInterceptor interceptor = new LoginInterceptor();
// 配置一个白名单
List<String> patterns = new ArrayList<>();
/**
* 配置拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 创建自定义拦截器
HandlerInterceptor interceptor = new LoginInterceptor();
// 配置一个白名单
List<String> patterns = new ArrayList<>();
patterns.add("/bootstrap3/**");
patterns.add("/css/**");
patterns.add("/images/**");
patterns.add("/js/**");
patterns.add("/web/register.html");
patterns.add("/web/login.html");
patterns.add("/web/index.html");
patterns.add("/stu/reg");
patterns.add("/stu/login");
// 完成了拦截器的注册
registry.addInterceptor(interceptor)
.addPathPatterns("/**")// 表示要拦截的url
.excludePathPatterns(patterns);// 表示白名单
}
}