У меня есть приложение, которое подключается к серверу CAS, позволяет пользователю выполнить вход в систему CAS / SSO, а затем перенаправляет их на домашнюю страницу приложения. Достаточно просто.
Проблема в том, что CAS является относительно новым для моей организации, и на сегодняшний день у нас он установлен только на одном сервере. Таким образом, если сервер становится недоступным по какой-либо причине, к приложению больше нельзя будет получить доступ, поскольку страница входа в CAS не загрузится.
Я бы хотел, чтобы мое приложение могло обнаруживать
а) сервер CAS недоступен после разумного количества повторных попыток
б) впоследствии перенаправить пользователя на страницу входа без CAS / SSO и использовать базовую конфигурацию Spring Security, которая существует с использованием LDAP.
Я ничего не вижу в документации Spring для этого конкретного сценария. Предложения?
Вы можете попробовать расширить CasAuthenticationEntryPoint. Точки входа в Spring Security - это вещи, которые определяют, куда идти, когда необходима аутентификация.
public LocalLoginFallbackCasAuthenticationEntryPoint
extends CasAuthenticationEntryPoint {
@Override
protected String createRedirectUrl(final String serviceUrl) {
if ( prevailingCircumstancesMandate() ) {
return "/our/legacy/login/page";
} else {
// go to CAS, like normal
return super.createRedirectUrl(serviceUrl);
}
}
}
А затем настройте в своем объекте HttpSecurity:
@Override
protected void configure(HttpSecurity http) {
http.exceptionHandling()
.authenticationEntryPoint(myCustomEntryPoint());
}
Короче говоря, нельзя. После перенаправления на другую службу эта служба должна обрабатывать этот запрос. Что можно сделать относительно легко, так это подумать об этом с точки зрения обнаружения сервисов. Например, «преобладающие обстоятельства» могут быть просто свойством конфигурации: например, should.we.redirect.to.cas = true. Затем, возможно, вы могли бы автоматизировать мониторинг сервера CAS на предмет 500 и 400 отсчетов состояния, и как только этот счет превысит определенный порог, автоматизация переключит значение конфигурации на определенный период времени, а затем вернет его обратно.
Спасибо за ответ, Джош. Я изучаю его со вчерашнего дня, и где я застрял, это часть «преобладающих обстоятельств». Ожидается, что URL-адрес точки входа CAS, который я возвращаю, будет недоступен, поэтому я не получаю никакого ответа. Я не могу понять, как это определить. Только когда я знаю, что этот URL-адрес недоступен, я передам свою настраиваемую точку входа. Я продолжу исследовать. Предложения приветствуются. Спасибо.