Добавление нового фильтра в цепочку

#jhipster

Вопрос:

Я хочу добавить новый фильтр сервлетов в цепочку JHipster. Это тот, который должен выполняться после того, как JWT был признан действительным. По сути, я хочу, чтобы этот новый фильтр проверял репозиторий «баланс» для текущего пользователя и возвращал код HTTP 402, если баланс недостаточен.

Я подумал о том, чтобы добавить его после фильтра аутентификации имени пользователя(который идет после фильтра JWT) через конфигуратор баланса

     public BalanceConfigurer() {

    }

    @Override
    public void configure(HttpSecurity http) {
        BalanceFilter balanceFilter = new BalanceFilter();
        http.addFilterAfter(balanceFilter, UsernamePasswordAuthenticationFilter.class);
    }
 

это кажется правильным ?

Комментарии:

1. Если я не ошибся, фильтры исправлены, чтобы всегда возвращать 401 при ошибке ? Возможно, лучшей идеей было бы создать аспект и прикрепить его к соответствующим контроллерам.. попросите его проверить баланс перед методом .. выдать исключение недостаточного баланса, когда это имеет смысл, а затем уловить это в «после» аспекта и перейти к коду Http 402 ?

2. Учитывая, что вы хотите выполнить код после аутентификации JWT и до контроллера, рассматривали ли вы возможность использования обработчика-интерпретатора? Это похоже на Аспект, но проще. Видишь baeldung.com/spring-mvc-handlerinterceptor-vs-filter

3. ДА.. на самом деле это то, что я в конечном итоге сделал намного проще.. github.com/walshe/bolt11-lightning-monitized-api-/blob/master/…

Ответ №1:

Было намного проще добавить a BalanceInterceptor — встраивание org.springframework.web.servlet.HandlerInterceptor , которое также позволило мне выяснить фактический вызываемый api (что я не мог сделать с аспектом на контроллере )