Есть ли у нас условия для цепочки перехватчиков весной? - PullRequest
0 голосов
/ 02 июня 2019

Допустим, у нас есть два перехватчика: «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 {

    }

1 Ответ

0 голосов
/ 02 июня 2019

Вам просто нужно убедиться, что 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{

}
...