Spring Security,仅允许https连接,否则发送错误

时间:2019-03-04 11:19:22

标签: rest redirect spring-security https

我有一些REST服务,并且根据要求,允许调用者仅通过https调用它们:每次尝试使用http时,都必须通过发回自定义的json错误响应来拒绝该请求。 在Spring Security中,我不知道如何实现此行为...我唯一能做的就是包括以下配置:

.and()。requiresChannel()。anyRequest()。requiresSecure()

但是结果是透明的重定向,尽管可以接受并且可能是“正确的”,但仍不能满足要求。

有什么想法吗?提前致谢!

1 个答案:

答案 0 :(得分:0)

处理请求的默认ChannelProcessorSecureChannelProcessor,它使用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实例是默认创建的(如果Jackson在类路径中),并将其提供给您的入口点。