【问题标题】:Spring security, allow only https connection and send error otherwiseSpring 安全,只允许 https 连接,否则发送错误
【发布时间】:2019-03-04 11:19:21
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: rest redirect spring-security https


    【解决方案1】:

    处理您的请求的默认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 在类路径上)并将其提供给您的入口点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多