У меня есть проблема, похожая на этот вопрос .Однако, так как этому вопросу 5 лет, я подумал задать его еще раз.
Моя главная цель - создать пользовательский принципал в моем пользовательском модуле входа.Таким образом, я могу поделиться дополнительной информацией (например, носителем аутентификации) с остальной частью моего приложения.
Это мой пользовательский модуль входа в систему
public class MyCustomModule extends AppservPasswordLoginModule
{
@Override
protected void authenticateUser() throws LoginException
{
SecurityUtil.authenticateUser(_username, _passwd);
commitUserAuthentication(SecurityUtil.getGroups(_username));
}
@Override
public boolean commit() throws LoginException {
String username = getUsername();
if(super.commit()){
CustomPrincipal principal = new CustomPrincipal(username);
principal.setAuthHeader("this is an auth header");
_subject.getPrincipals().remove(_userPrincipal);
_userPrincipal = principal;
_subject.getPrincipals().add(principal);
return true;
}
return false;
}
}
Однако, когда я пытаюсь использовать моего принципала в бине:
@Named
@SessionScoped
public class AuthHelper implements Serializable {
private HttpServletRequest getHttpServletRequest() {
return (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
}
private Principal getUserPrincipal() {
return getHttpServletRequest().getUserPrincipal();
}
public String getAuth(){
return ((CustomPrincipal) getUserPrincipal()).getAuthHeader();
}
}
Я получаю исключение CastException.Я много чего перепробовал, но похоже, что стеклянная рыбка делает своего Принципала и просто игнорирует мой.
Заранее спасибо!