Мое приложение поддерживает несколько методов безопасности. Он отправляет несколько WWW-Authenticate
заголовков с проблемами. Ответ должен выглядеть следующим образом:
WWW-Authenticate: Basic realm="MyApp"
WWW-Authenticate: Bearer realm="MyApp"
WWW-Authenticate: OtherAuthMethod
Проблема в том, что BasicAuthenticationEntryPoint
фиксирует ответ, и после этого никакие другие заголовки не добавляются:
response.addHeader("WWW-Authenticate", "Basic realm=\"" + realmName + "\"");
// this closes the response:
response.sendError(HttpStatus.UNAUTHORIZED.value(), HttpStatus.UNAUTHORIZED.getReasonPhrase());
Есть два обходных пути Я думал о:
- Измените порядок так, чтобы точка входа Basi c стала последней.
- Исправьте код.
Это работает:
class MyBasicAuthenticationEntryPoint extends BasicAuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException authException) {
response.addHeader(HttpHeaders.WWW_AUTHENTICATE, "Basic realm=\"" + getRealmName() + "\"");
response.setStatus(HttpStatus.UNAUTHORIZED.value());
}
}
Приведенный выше код является то, что, например, BearerTokenAuthenticationEntryPoint
, нет коммитов, как в BasicAuthenticationEntryPoint
.
Какой смысл? Я что-то пропустил? Есть ли лучшее решение?