Удаленное подключение iiop к Filenet Content Engine
У меня есть два сервера WebSphere. 1-й (v.8.5.5) хост мой локальный EJB-компонент (роль администратора RunsAS, которая сопоставлена с "domain_user"). Второй (v.7) - FileNet ContentEngine 5.1. Это нормально, когда я развертываю свой Ejb-компонент во 2-й Websphere и соединяюсь с помощью iiop://localhost:2809/FileNet/Engine.
Но появляется ошибка при удаленном подключении с 1-го WAS iiop://second-was:2809/FileNet/Engine
Я установил эти конфиги:
System.setProperty ("java.security.auth.login.config", "c: \ eq \ config \ jaas.conf.WebSphere"); System.setProperty ("com.ibm.CORBA.ConfigURL", "file: c: \ ea \ config \ sas.client.props");
... тогда делай PushSubject
[4/9/16 21:50:04:038 YEKT] 0000022f BusinessExcep E CNTR0020E: EJB threw an unexpected (non-declared) exception during invocation of method "getDocumentContent" on bean "BeanId(web-services-bni#ejb-1.0.1-SNAPSHOT.jar#CeServiceImpl, null)". Exception data: com.filenet.api.exception.EngineRuntimeException: FNRCS0001E: SECURITY_ANONYMOUS_DISALLOWED: Access to Content Engine was not allowed because the request was made anonymously instead of by an authenticated user. The application server reported that the user was anonymous. errorStack={
at com.filenet.engine.context.SecurityContext.<init>(SecurityContext.java:75)
at com.filenet.engine.context.ServerCallContext.<init>(ServerCallContext.java:107)
at com.filenet.engine.context.ServerCallContext.newInstance(ServerCallContext.java:1115)
at com.filenet.engine.jca.impl.RequestBrokerImpl.executeSearch(RequestBrokerImpl.java:814)
at com.filenet.engine.ejb.EngineCoreBean._executeSearch(EngineCoreBean.java:318)
мой код EJB:
@DeclareRoles({"Everyone", "Admin"})
@RolesAllowed({"Everyone", "Admin"})
@RunAs("Admin")
@Stateless
public class CeServiceImpl implements CeServiceLocal {
private static final Logger logger = Logger.getLogger(CeServiceImpl.class.getName());
private CeServiceHelper serviceHelper;
private Subject subject;
@PostConstruct
public void init() {
logger.info("CeServiceImpl init started");
String ceUri = ConfigHelper.getCeUri();
if (ceUri == null) {
logger.log(Level.SEVERE, "ceUri can not be null");
throw new NullPointerException("ceUri can not be null");
}
logger.info("ceUri: " + ceUri);
System.setProperty("java.security.auth.login.config", "c:\\ea\\config\\jaas.conf.WebSphere");
System.setProperty("com.ibm.CORBA.ConfigURL", "file:c:\\ea\\config\\sas.client.props");
Connection connection = Factory.Connection.getConnection(ceUri);
subject = UserContext.createSubject(connection, "os_user", "password", "FileNetP8");
try {
UserContext.get().pushSubject(subject);
} catch (Exception e) {
logger.warning(e.getMessage());
}
serviceHelper = new CeServiceHelper(connection);
}
Кстати, моя конечная цель - прозрачно создать удаленное соединение (без pushSubject, popSubject..)
2 ответа
Вы можете проверить дату и время двух серверов: оба должны быть синхронизированы с временем UTC в течение максимум 5 минут. Надеюсь, это поможет.
У меня есть следующий совет:
Возможно, вам следует синхронизировать две ячейки WAS:
- Сгенерируйте ключи LTPA в одной ячейке WAS: http://www.ibm.com/support/knowledgecenter/was_beta/com.ibm.websphere.base.doc/ae/tsec_sslmanagelptakeys.html
- Импортируйте их во вторую ячейку WAS: http://www.ibm.com/support/knowledgecenter/was_beta/com.ibm.websphere.base.doc/ae/tsec_altpaimp.html?lang=en