在我们实际开发工程中,很多页面需要先进行用户登陆才能够进行访问,为防止用户直接在地址栏输入地址访问未登录不能访问的页面,我们可以使用拦截器来进行拦截。
设置拦截器的步骤:
1.编写一个拦截器,实现HanderInterceptor接口 2.将编写好的拦截器注册到容器中(实现WebConfigure的addInterceptors) 3.指定拦截规则,设置哪些拦截哪些放行
接下来我们就自己编写并配置使用一个拦截器:
1.编写一个拦截器,实现HanderInterceptor接口
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){
//如果seeeion不为空,则放行
return true;
}
//未登陆状态就拦截住,跳转到登陆页
request.setAttribute("msg","请先登陆!");//设置错误提示信息
request.getRequestDispatcher("/").forward(request,response);//携带错误信息转发到登陆界面
return false;
}
}
2.将编写好的拦截器注册到容器中(实现WebConfigure的addInterceptors)
3.指定拦截规则,设置哪些拦截哪些放行
public class AdminConfig implements WebMvcConfigurer {
@Override
//添加一个自定义的拦截器
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**");
//将我们自定义的拦截器添加到容器中
//.addPathPatterns("/**"):设置拦截所有路径
//.excludePathPatterns("/","/login"):设置放行路径
//注:"/","/login"为登录页路径,"/css/**","/fonts/**","/images/**","/js/**"为静态资源路径
}
}
简单的拦截器就设置完成了,我们来看一下效果。
如果为登陆直接访问其他页面,则被拦截器拦截且显示“请先登陆”字样。
注意:设置拦截器拦截路径时注意css/js等静态路径放行,否则页面将会没有检测不到css样式以及js模块。