В EJB-проекте мне нужно заменить имя принципа вызова в "javax.ejb.SessionContext". Я использую Jboss AS 6.0 Final в качестве сервера приложений.
Я определил пользовательский модуль UserLoginModule, который расширяет UsernamePasswordLoginModule, и добавил пользовательский участник, но мой пользовательский участник не будет распространен в EJB SessionContext.
Вот код из моего пользовательского модуля входа в систему:
@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.
Оказалось, что есть ошибка Jobss: EJBContext.getCallerPrincipal () не возвращает пользовательский принципал https://issues.jboss.org/browse/JBAS-8427
И связанная тема: http://community.jboss.org/thread/44388.
Интересно, есть ли у вас какой-то опыт по этому вопросу, и безопасно ли заменить основной принцип по умолчанию, который создает Jboss? Есть ли побочные эффекты?