В настоящее время я использую фильтр для проверки подлинности SSO. (SSO считается аутентифицированным, если заголовок запроса содержит переменную «Proxy-Remote-User»).Как интегрировать аутентификацию SSO с помощью JSF?
if (!(isSsoLoggedIn(request)) {
response.sendRedirect(ERROR_PAGE);
return;
} else {
chain.doFilter(req, res);
}
private boolean isSsoLoggedIn(HttpServletRequest request) {
return request != null && request.getHeader("Proxy-Remote-User") != null
&& !request.getHeader("Proxy-Remote-User").equals("");
}
Теперь, когда пользователь проходит аутентификацию, я хочу передать эту переменную (которая является адрес электронной почты) в JSF. Я делаю это с сессионной областью действия фасоли:
@PostConstruct
public void init {
Map<String, String> requestHeaderMap = FacesContext.getCurrentInstance().getExternalContext().getRequestHeaderMap();
String email = requestHeaderMap.get("Proxy-Remote-User");
user = getPersonFromDB(email);
}
Это кажется достаточно простым, но я не уверен, если его «правильный» способ сделать это. Не похоже, чтобы полагаться на экземпляр компонента для проверки подлинности.
Одна из идей, которые у меня только что были: Используйте bei-интерфейс с сессией CDI и @ Вставьте его в фильтр. Затем вы можете сами проверить фильтр для действительного пользователя и, если он действителен, установить его в компоненте, зависящем от сеанса, в противном случае переслать его на страницу с ошибкой.
Это звучит как верное решение?
Другой подход мог бы иметь каждый чек страниц для аутентификации, прежде чем вид оказывается, с видом парам, как указано здесь:
JSF calls methods when managed bean constructor sends 404 ERROR CODE
<f:metadata>
<f:viewAction action="#{bean.checkForValidUser}" />
</f:metadata>
Единственная проблема, у меня есть для это ... это потребует копирования/вставки одного и того же кода на каждую страницу, которая кажется излишней (или, по крайней мере, шаблон для всех их использования).
У вас есть CDI под рукой? – BalusC
К сожалению, я использую ManagedBeans, но у нас есть цель конвертировать в CDI в будущем. Я еще не изучил процедуру, но, если ее довольно легко, я, вероятно, мог бы перейти к ним, чтобы заставить это работать. – wsaxton
Если я могу конвертировать в CDI, вы предполагаете, что мой CDI-решение выше будет действительным? – wsaxton