Spring security, разрешить только https соединение и отправить ошибку в противном случае - PullRequest
0 голосов
/ 04 марта 2019

У меня есть некоторые службы REST, и, как требуется, вызывающему разрешается вызывать их только по https: при каждой попытке использования http запрос должен быть отклонен путем отправки настроенного ответа об ошибке json.В весенней безопасности я не знаю, как реализовать это поведение ... единственное, что я смог сделать, это включить эту конфигурацию:

.and (). RequireChannel (). AnyRequest ().requireSecure ()

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

Есть идеи?Заранее спасибо!

1 Ответ

0 голосов
/ 04 марта 2019

По умолчанию ChannelProcessor, обрабатывающий ваш запрос, - SecureChannelProcessor, и он использует RetryWithHttpsEntryPoint, который выполняет перенаправление.Вместо этого предоставьте собственную точку входа для процессора по умолчанию:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //...
        http.requiresChannel().anyRequest().requiresSecure()
                            .channelProcessors(
                                Arrays.asList(mySecureChannelProcessor())
                            );
    }
}

    @Bean
    public ChannelProcessor mySecureChannelProcessor() {
        SecureChannelProcessor defaultProcessor = new SecureChannelProcessor();
        defaultProcessor.setEntryPoint(new SendHttpsError());
        return defaultProcessor;
    }

}


public class SendHttpsError implements ChannelEntryPoint {
    @Override
    public void commence(HttpServletRequest request, HttpServletResponse response) {
        // send error
    }
}

Если вы используете Spring Boot, вы можете @Autowire экземпляр ObjectMapper, который создается по умолчанию (если Джексон находится напуть к классу) и предоставьте его точке входа.

...