我有一些REST服务,并且根据要求,允许调用者仅通过https调用它们:每次尝试使用http时,都必须通过发回自定义的json错误响应来拒绝该请求。 在Spring Security中,我不知道如何实现此行为...我唯一能做的就是包括以下配置:
.and()。requiresChannel()。anyRequest()。requiresSecure()
但是结果是透明的重定向,尽管可以接受并且可能是“正确的”,但仍不能满足要求。
有什么想法吗?提前致谢!
答案 0 :(得分:0)
处理请求的默认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
实例是默认创建的(如果Jackson在类路径中),并将其提供给您的入口点。