自定义登录模块(Glassfish)中的自定义主体

时间:2019-03-20 11:16:49

标签: java-ee glassfish

我遇到类似于this question的问题。但是,由于这个问题已有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;
    }
}

但是,当我尝试在bean中使用我的委托人时:

@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。我已经尝试了很多事情,但似乎玻璃鱼成了自己的Principal,而完全忽略了我的。

谢谢!

0 个答案:

没有答案