拦截器是拦截Action调用对象,提供一系列的方法,可以使开发者在Action调用前后执行一段代码,也可以阻止Action的执行,比如被用来区分登陆和非登陆用户。
这里用SpringBoot的登陆场景作为例子,来说明拦截器的使用方法。
1,重写HandlerInterceptor方法
public class TestInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return false;
}
}
2,添加需要拦截的对象
public class TestInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//有session说明登陆成功
Object session = request.getSession().getAttribute("logionSession");
if (loginUser==null){//没有登陆
request.setAttribute("msg","没有权限,请先登陆");
request.getRequestDispatcher("login.html").forward(request,response);
return false;
}else {
return true;
}
}
}
return false的情况下会被拦截
3,重写WebMvcConfigurer,添加拦截器
@Configuration
public class testConfig implements WebMvcConfigurer {
//这段代码的意思是,添加拦截器,添加拦截对象,排除拦截对象。
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new TestInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/login.html","/css/**","/img/**");
}
}
由于需要用户登陆,所以不能拦截登陆页面,需要把这部分页面排除