1.编写ObjectInterceptor类,实现HandlerInterceptor类。
实现HandlerInterc此接口有三个方法 。
preHandler | 控制器方法执行之前执行preHandle(),其boolean类型的返回值表示是否拦截或放行,返 回true为放行,即调用控制器方法;返回false表示拦截,即不调用控制器方法。 |
postHandle | 控制器方法执行之后执行postHandle() |
afterComplation | 理完视图和模型数据,渲染视图完毕之后执行afterComplation() |
对登录功能进行拦截,通过判断session中是否包含用户信息觉得是否放行。
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
UserDTO user = (UserDTO) session.getAttribute("user");
if(user == null){
response.setStatus(401);
return false;
}
UserHolder.saveUser(user);
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
UserHolder.removeUser();
}
}
2.将拦截器注册到容器中。
编写配置类,实现WebMvcConfigurer类,通过addInterceptor方法添加拦截器。
@Configuration
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.excludePathPatterns( //添加不需要拦截的地址
"/user/login",
"/user/code",
"shop/**",
"shop-type/**",
"blog/hot"
);
}
}