Spring security Spring安全性-为所有URL发送基本身份验证头,而不仅仅是为安全端点发送

Spring security Spring安全性-为所有URL发送基本身份验证头,而不仅仅是为安全端点发送,spring-security,basic-authentication,Spring Security,Basic Authentication,在Spring Security/Boot应用程序中,我为特定URL模式配置了基本身份验证: http.antMatcher(StringUtils.join("myURL", "/**")).authorizeRequests().anyRequest().authenticated().and().httpBasic().realmName("realmName"); 这就像一个符咒,当我请求该模式的URL时,浏览器会提示我提供凭据,然后我可以访问该端点。 但是,在此端点成功授权后,浏览器

在Spring Security/Boot应用程序中,我为特定URL模式配置了基本身份验证:

http.antMatcher(StringUtils.join("myURL", "/**")).authorizeRequests().anyRequest().authenticated().and().httpBasic().realmName("realmName");
这就像一个符咒,当我请求该模式的URL时,浏览器会提示我提供凭据,然后我可以访问该端点。 但是,在此端点成功授权后,浏览器会发送带有“Basic…”标记的授权标头,即使对于与上述代码中配置的URL无关的URL请求也是如此。例如网站主页

这会导致webapp的其他授权机制,即keydove,启动,因为它们希望在授权头中包含有效的令牌。我知道我可以以一种不试图解释以“Basic”开头的授权头的方式配置keydape,但这种困境的根本原因似乎是发送的头get用于不属于Basic auth URL的请求

是否有任何方法可以告诉Spring Security/浏览器/任何人,如果请求的URL与http basic配置的模式相匹配,则基本身份验证头只应包含在请求中?这不应该是标准行为吗

示例URL:

  • localhost:8083/myURL:我希望浏览器发送 认证头
  • localhost:8083/myURL/moreURL:我还希望浏览器发送 认证头
  • localhost:8083/someOtherURL:我不希望浏览器发送 身份验证标头,但它确实存在
  • localhost:8083/someOtherURL/moreURL:同样,浏览器发送 意外标题

您的应用程序必须使用不同的包含目录和不同的领域,请参阅:

2基本认证方案

[…]
客户机应假定所有路径的深度等于或大于 请求URI的路径字段中的最后一个符号元素也是 在基本领域值指定的保护空间内 当前的挑战。客户端可以抢先发送 与中的资源请求对应的授权标头 在没有收到来自服务器的另一个质询的情况下共享该空间

另见:

对于您的一个应用程序,包含目录为
/
。另一个应用程序位于包含该目录的子路径中。因此,您的浏览器会先向两个应用程序发送相同的
授权

// Helper to find the containing directory of path. In RFC 2617 this is what
// they call the "last symbolic element in the absolute path".
// Examples:
//   "/foo/bar.txt" --> "/foo/"
//   "/foo/" --> "/foo/"