Используя два перехватчика по порядку - PullRequest
0 голосов
/ 30 апреля 2019

Я использую данные Spring и напрямую бьюсь о конечную точку без контроллера. Поскольку я хотел проверить авторизацию, создал перехватчик, который проверяет запрос на основе некоторых утверждений в токене авторизации.

@Configuration
@Order(1)
public class AuthConfig implements WebMvcConfigurer {

    @Autowired
    AuthInterceptor requestInterceptor;

    @Bean
    public MappedInterceptor exampleInterceptor() {
        return new MappedInterceptor(new String[]{"/api/**"}, requestInterceptor);
    }
}

@Component
public class AuthInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {

        //validate authorization 
        if (authorized) {
            return true;
        } else {
            return false;
        }
    }
}

это прекрасно работает. Теперь я хочу добавить другой перехватчик, чтобы я мог перехватить один запрос и выполнить какой-то процесс. Я делаю, потому что этот API не имеет контроллера / службы, поэтому перехват это то, что я думал, как это сделать

@Configuration
@Order(2)
public class ProcessConfiguration implements WebMvcConfigurer {

    @Autowired
    ProcessInterceptor requestInterceptor;

    @Bean
    public MappedInterceptor processInterceptor() {
        return new MappedInterceptor(new String[]{"/api/entity/*"}, requestInterceptor);
    }
}

@Component
public class ProcessInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        // do some process
        return true;
    }
}

Итак, я хотел сначала вызвать auth interceptor и затем обработать interceptor, если запрос авторизован. И я использовал @Order, чтобы отразить то же самое, но он не работает, как ожидалось. Есть ли другой способ сделать это или я делаю это неправильно?

...