Пользовательский принципал в модуле пользовательского входа (Glassfish) - PullRequest
0 голосов
/ 20 марта 2019

У меня есть проблема, похожая на этот вопрос .Однако, так как этому вопросу 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.Я много чего перепробовал, но похоже, что стеклянная рыбка делает своего Принципала и просто игнорирует мой.

Заранее спасибо!

...