Spring Security: Как установить собственный PortMapper? - PullRequest
0 голосов
/ 23 января 2020

Мое приложение прослушивает порты HTTP и HTTPS. Канал HTTP доступен только для нескольких клиентов, все остальные должны быть перенаправлены на безопасный канал (HTTPS) при попытке доступа к небезопасному.

Проблема в том, что HTTPS-порт для перенаправления, по уважительным причинам, я ' m сам запускаю соединитель, исходя из свойств приложения. Конфигурация по умолчанию сопоставление портов реализация PortMapperImpl неизвестна, поэтому она всегда возвращает 443 или 8443, игнорируя фактические порты, которые прослушивает приложение.

Пока что Я нашел это; это работает, но выглядит действительно ужасно:

@Configuration
class MySecurityAdapter extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
            .requiresChannel()
            .requestMatchers(/* some matchers */)
            .requiresSecure()
            .and()
            .setSharedObject(PortMapper.class, myPortMapper());
    }
    @Bean
    PortMapper myPortMapper() { return new MyPortMapper(); }
}

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

Каков правильный способ настроить пользовательское сопоставление портов? Это там какой-нибудь элегантный?

1 Ответ

0 голосов
/ 23 января 2020

API сервлетов также позволяет настроить преобразователь портов с помощью метода portMapper().

В этом случае вы можете использовать следующую конфигурацию

httpSecurity
        .requiresChannel()
            .requestMatchers(/* some matchers */)
            .requiresSecure()
            .and()
        .portMapper()
            .portMapper(new MyPortMapper());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...