做笔记做笔记
WebMvcConfigurer实现拦截器
SpringBoot2.0及Spring5.0中WebMvcConfigurerAdapter已被废弃,所以我们这里就用官方推荐的方式来实现:
<1>.直接实现WebMvcConfigurer
<2>.直接继承WebMvcConfigurationSupport
在这我只使用了第一种的方法,任性_(:з」∠)_,直接实现WebMvcConfigurer
1)创建CommonWebAppConfigurer.java
@Configuration
public class CommonWebAppConfigurer implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 多个拦截器组成一个拦截器链
InterceptorRegistration r1 = registry.addInterceptor(new CommonInterceptor());
// addPathPatterns 添加拦截
r1.addPathPatterns("/index");
// excludePathPatterns 排除拦截
r1.excludePathPatterns("/login");
}
}
org.springframework.web.servlet.config.annotation.InterceptorRegistration.addPathPatterns(String... patterns)
addPathPatterns 是添加拦截路径,参数支持多个路径。
org.springframework.web.servlet.config.annotation.InterceptorRegistration.excludePathPatterns(String... patterns)
excludePathPatterns 是添加不拦截的路径,参数支持多个路径。
添加拦截之后就是对拦截路径之后的处理,不处理你拦他干嘛ヽ(ー_ー)ノ
2)创建CommonInterceptor.java
public class CommonInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,HttpServletResponse response,
Object handler) throws Exception {
System.out.println(">>>CommonInterceptor>>>>>>>在请求处理之前进行调用");
return true;// 只有返回true才会继续向下执行,返回false取消当前请求
}
@Override
public void postHandle(HttpServletRequest request,HttpServletResponse response,
Object handler,ModelAndView modelAndView) throws Exception {
System.out.println(">>>CommonInterceptor>>>>>>>请求处理之后进行调用");
}
@Override
public void afterCompletion(HttpServletRequest request,HttpServletResponse response,
Object handler, Exception ex)throws Exception {
System.out.println(">>>CommonInterceptor>>>>>>>在整个请求结束之后被调用");
}
}
路径被拦截之后
三个方法的不同之处:
1)preHandle(...):请求处理之前进行调用;
2)postHandlef(...):请求处理之后进行调用,但是在视图被渲染之前;
3)afterCompletion(...):在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行;
具体的操作的话,emmmm我想想(◐ˍ◑)
对了,你可以做个重定向,笑~
@Override
public boolean preHandle(HttpServletRequest request,HttpServletResponse response,
Object handler) throws Exception {
System.out.println(">>>CommonInterceptor>>>>>>>在请求处理之前进行调用");
response.sendRedirect(request.getContextPath() + "/login");
return true;// 只有返回true才会继续向下执行,返回false取消当前请求
}
这样你的被拦截路径就会被指向login登录页,当然这个是我的登录页。
以上就是我简单的拦截器的具体实现