步骤:
1.定义拦截器
2.配置拦截器
正文:
1.定义拦截器, 实现 HandlerInterceptor 接口, 重写接口的方法,在spring mvc 的拦截器中有三个方法
1)preHandle :进入controller前
方法参数(HttpServletRequest request, HttpServletResponse response, Object handler)
重点是request和response,一般主要使用这两个参数,比如从request中获取特定的值,然后进行某些操作,或者修改response的响应头之类的操作
2)postHandle :进入controller中,在return前
方法参数(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView)
重点是modelAndView,此步骤主要是拦截modelAndView,在返回modelAndView前对modelAndView进行一些操作,比如添加或者删除一些键值对
3)afterCompletion :出controller后,试图解析前
方法参数(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex)
重点是Exception ex,此步骤主要是拦截异常,对异常进行操作
示例:
public class PermissionInterceptor implements HandlerInterceptor {
private Logger logger = LoggerFactory.getLogger(PermissionInterceptor.class);
@Autowired
private SsoProxy ssoProxy;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//TODO 权限拦截
String requestURI = request.getRequestURI();
// logger.info("uri: = " + requestURI);
return true;
}
}
2.配置拦截器
1)实例化自定义拦截器,并交由spring管理,
2)编写配置类,并继承 WebMvcConfigurationSupport 类,重写 addInterceptors(InterceptorRegistry registry) 方法;
WebMvcConfigurationSupport 是springmvc的默认配置类,之前用WebMvcConfigurerAdapter,现WebMvcConfigurerAdapter已弃用,改用WebMvcConfigurationSupport,该类对springmvc的配置默认添加了一些实现,并提供了支持扩展的方法,使用者只需要继承该类,然后补充自己的配置,例如添加拦截器,添加拦截器的方法:addInterceptors
@Configuration
//@Order(-1)
public class AppConfig extends WebMvcConfigurationSupport {
@Bean
public PermissionInterceptor getPermissionInterceptor(){
return new PermissionInterceptor();
}
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getPermissionInterceptor()).addPathPatterns("/**/api/**");
super.addInterceptors(registry);
}