项目需求
在用户浏览部分页面前,检测用户是否已经登录过,若登录过,则允许访问,
若未登陆过,则拦截目标页面的访问,并跳转至登录界面
配置方法
步骤一
创建inteceptor包,创建LoginInteceptor类
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 {
Object obj=request.getSession().getAttribute("uid");
if (obj==null){
//用户没有登录过系统
response.sendRedirect("/web/index.html");
return false;
}
return true;
}
}
步骤二
在config包下创建LoginInterceptorConfig类实现WebMvcConfigure类注册拦截器
registry.addInterceptor()用于注册拦截器
addPathPatterns(“/**”)意为拦截所有页面,参数是需要拦截的页面
excludePathPatterns()参数是不需要拦截的页面
/**
* 拦截器注册
*/
@Configuration
public class LoginInterceptorConfig implements WebMvcConfigurer {
HandlerInterceptor interceptor=new LoginInterceptor();
@Override
public void addInterceptors(InterceptorRegistry registry) {
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/index.html");
patterns.add("/web/login.html");
patterns.add("/web/product.html");
patterns.add("/users/reg");
patterns.add("/users/login");
registry.addInterceptor(interceptor).addPathPatterns("/**").excludePathPatterns(patterns);
}
}