Spring security 从requiresSecure()中排除URL

Spring security 从requiresSecure()中排除URL,spring-security,Spring Security,我有一个应用程序,我想强制HTTPS的所有请求,除了一个。对于那个URL,我不在乎它是否是HTTP/HTTPS 我目前有以下安全配置 http.requiresChannel() .antMatchers("/actuator/health").requiresInsecure() .antMatchers("/*").requiresSecure(); 问题是,这要求通过HTTPs访问健康端点,但我并不真正关心使用什么协议(我更喜欢两者)。 当您配置授权时,您

我有一个应用程序,我想强制HTTPS的所有请求,除了一个。对于那个URL,我不在乎它是否是HTTP/HTTPS

我目前有以下安全配置

http.requiresChannel()
        .antMatchers("/actuator/health").requiresInsecure()
        .antMatchers("/*").requiresSecure();
问题是,这要求通过HTTPs访问健康端点,但我并不真正关心使用什么协议(我更喜欢两者)。 当您配置授权时,您拥有permitAll,这与您是否经过身份验证无关,为什么它不是一种类似的通道安全机制


是否有人知道如何从通道安全机制中排除URL。

您可以使用一个正则表达式匹配器来匹配除要排除的URL之外的所有URL,如:

http...
 .and()
   .requiresChannel()
   .regexMatchers("^((?!/actuator/health).)*$").requiresSecure();`

注意:我不是正则表达式专家(可能需要改进)

您可以使用正则表达式匹配器来匹配除要排除的URL之外的所有URL,如:

http...
 .and()
   .requiresChannel()
   .regexMatchers("^((?!/actuator/health).)*$").requiresSecure();`

请注意,我不是正则表达式专家(可能需要改进)

我认为您可以尝试以下方法:

http.requiresChannel()
  .antMatchers("/actuator/health").requires(ChannelDecisionManagerImpl.ANY_CHANNEL)
    .anyRequest().requiresSecure();

我想你可以试试这样的东西:

http.requiresChannel()
  .antMatchers("/actuator/health").requires(ChannelDecisionManagerImpl.ANY_CHANNEL)
    .anyRequest().requiresSecure();

这也是我最好的建议,它可以很好地处理一个被排除的URL,但是如果你有很多URL,这种模式会很难看。我想知道是否有一个技术限制,我不知道,因为Spring没有“PermitallChannel”方法…??这也是我最好的建议,它可以很好地处理一个被排除的URL,但是如果有很多,那么模式会很难看。我想知道是否有一个技术限制,我不知道,因为Spring没有“PermitallChannel”方法…???看一下。看一下。