假设我们有两个拦截器“ LogInterceptor”和“ AuthInterceptor”。 第一个拦截器记录传入的请求,第二个拦截器对它进行身份验证。 目的:链接LogIntercptor和AuthInterceptor。首先,我希望调用logInterceptor,然后执行AuthInterceptor。 注意:我知道“重定向”并返回false(请不要提出该错误)
---------------------Log Interceptor---------------------------------------
//First Inteceptor
@Component
public class LogInterceptor extends HandlerInterceptorAdapter
{
private final Logger Logger =
LoggerFactory.getLogger(this.getClass());
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
//take action base on incoming IP
long startTime = System.currentTimeMillis();
request.setAttribute("startTime",startTime);
if(request.getRemoteAddr().startsWith("192"))
{
response.sendRedirect("/auth-failed"); //redirect to default
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler, @Nullable ModelAndView
modelAndView) throws Exception
{
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, @Nullable Exception
ex) throws Exception
{
}
}
//第二个拦截器“但是代码还不完整,我只是想知道如何实现。” AuthInterceptor类 {
}
答案 0 :(得分:0)
您只需要在配置Interceptor
时按所需顺序添加InterceptorRegistry
:
@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer{
@Autowired
private LogInterceptor logInterceptor;
@Autowired
private AuthInterceptor authInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(logInterceptor);
registry.addInterceptor(authInterceptor);
}
}
如果有多个WebMvcConfigurer
,则可以简单地使用@Order
来控制WebMvcConfigurer
的执行顺序(值越小优先级越高):
@EnableWebMvc
@Configuration
@Order(1)
public class FooWebConfig implements WebMvcConfigurer{
}
@EnableWebMvc
@Configuration
@Order(2)
public class BarWebConfig implements WebMvcConfigurer{
}