客户委托人赢得';不能在Jboss上传播到EJB SessionContext
在EJB项目中,我需要替换“javax.EJB.SessionContext”中的调用原则名称。我使用Jboss AS 6.0 Final作为应用服务器 我定义了一个自定义UserLoginModule,它扩展了UsernamePasswordLoginModule并添加了一个自定义主体,但我的自定义主体不会传播到EJB SessionContext 以下是我的自定义登录模块中的一些代码:客户委托人赢得';不能在Jboss上传播到EJB SessionContext,jboss,ejb,Jboss,Ejb,在EJB项目中,我需要替换“javax.EJB.SessionContext”中的调用原则名称。我使用Jboss AS 6.0 Final作为应用服务器 我定义了一个自定义UserLoginModule,它扩展了UsernamePasswordLoginModule并添加了一个自定义主体,但我的自定义主体不会传播到EJB SessionContext 以下是我的自定义登录模块中的一些代码: @Override protected Group[] getRoleSets() throws Logi
@Override
protected Group[] getRoleSets() throws LoginException {
Group[] groups = new Group[2];
groups[0] = new SimpleGroup("Roles");
groups[0].addMember(createRoleIdentity());
Group callerPrincipal = new SimpleGroup("CallerPrincipal");
callerPrincipal.addMember(createIdentity(this.getUsername()));
groups[1] = callerPrincipal;
subject.getPrincipals().add(callerPrincipal);
return groups;
}
@Override
protected Principal createIdentity(String username) throws LoginException {
return new MyCustomPrincipal(username);
}
}
我的自定义登录模块工作得很好,但我从“javax.ejb.SessionContext”获得的调用方主体仍然是SimplePrincipal
原来有一个作业错误:EJBContext.getCallerPrincipal()没有返回自定义主体
以及相关主题:
我想知道您是否对此有一些经验,替换Jboss创建的默认主体安全吗?有副作用吗 在我的团队的帮助下,我找到了一个解决方案,希望这能对那些有同样问题的人有所帮助 而不是“sessionContext.getCallerPrincipal()” 使用以下命令获取自定义主体:
try {
Subject subject = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container");
Set<Group> subjectGroups = subject.getPrincipals(Group.class);
Iterator<Group> iter = subjectGroups.iterator();
while (iter.hasNext()) {
Group group = iter.next();
String name = group.getName();
if (name.equals("CallerPrincipal")) {
Enumeration<? extends Principal> members = group.members();
if (members.hasMoreElements()) {
Principal principal = (Principal) members.nextElement();
return principal;
}
}
}
}
} catch (PolicyContextException e1) {
...
}
试试看{
Subject Subject=(Subject)PolicyContext.getContext(“javax.security.auth.Subject.container”);
Set subjectGroups=subject.getPrincipals(Group.class);
迭代器iter=subjectGroups.Iterator();
while(iter.hasNext()){
组=iter.next();
字符串名称=group.getName();
if(name.equals(“CallerPrincipal”)){
枚举在JBoss7中,这似乎仍然是一个问题