2016-05-20 2 views
0

Я использую IdentityProviderMgtServiceStub.updateResidentIdp() для обновления таймаута сеанса. Это мой код.WSO2 Identity Server 5.1.0 - Обновление IDP-резидента из IdentityProviderMgtService

IdentityProviderMgtServiceStub stub = new IdentityProviderMgtServiceStub("https://localhost:9443/services/IdentityProviderMgtService"); 
IdentityProvider idp = stub.getResidentIdP(); 
IdentityProviderProperty [] properties = idp.getIdpProperties(); 
for(IdentityProviderProperty property: properties){ 
    if(property.getName().equals(SESSION_IDLE_TIMEOUT) && sessionTimeOut!= 0L) { 
     property.setValue(String.valueOf(sessionTimeOut)); 
    }else if(property.getName().equals(REMEMBER_ME_TIMEOUT) && rememberMeTimeOut!= 0L){ 
     property.setValue(String.valueOf(rememberMeTimeOut)); 
    }  
} 
idp.setIdpProperties(properties); 
stub.updateResidentIdP(idp); 

Однако, это бросает исключение:

org.wso2.carbon.idp.mgt.IdentityProviderManagementException: Cannot find authenticator : openidconnect 
at org.wso2.carbon.idp.mgt.dao.IdPManagementDAO.getAuthenticatorIdentifier(IdPManagementDAO.java:2571) 
at org.wso2.carbon.idp.mgt.dao.IdPManagementDAO.updateFederatedAuthenticatorConfig(IdPManagementDAO.java:385) 
at org.wso2.carbon.idp.mgt.dao.IdPManagementDAO.updateFederatedAuthenticatorConfigs(IdPManagementDAO.java:348) 
at org.wso2.carbon.idp.mgt.dao.IdPManagementDAO.updateIdP(IdPManagementDAO.java:1716) 
at org.wso2.carbon.idp.mgt.dao.CacheBackedIdPMgtDAO.updateIdP(CacheBackedIdPMgtDAO.java:297) 
at org.wso2.carbon.idp.mgt.IdentityProviderManager.updateResidentIdP(IdentityProviderManager.java:636) 
at org.wso2.carbon.idp.mgt.IdentityProviderManagementService.updateResidentIdP(IdentityProviderManagementService.java:74) 

Это исключение уходит, если я вручную позвонить idp.setFederatedAuthenticatorConfigs(null);. Но это не имеет смысла, поскольку мне не нужно прикасаться к какой-либо области, которую я не обновляю. Мой вопрос:

(1) Безопасно ли позвонить idp.setFederatedAuthenticatorConfigs(null); в моем случае использования?

(2) Это ошибка в WSO2?

ответ

1

Используйте, пожалуйста, код ниже, чтобы обновить резидентный идентификатор поставщика. Не используйте непосредственно значения, полученные из «stub.getResidentIdP()», потому что некоторые ненужные значения не нужно отправлять.

 IdentityProvider identityProvider = new IdentityProvider(); 

     identityProvider.setEnable(true); 
     identityProvider.setPrimary(true); 
     identityProvider.setIdentityProviderName("LOCAL"); 
     identityProvider.setHomeRealmId("localhost"); 

     IdentityProviderProperty propertySessionIdelTimeout = new IdentityProviderProperty(); 
     propertySessionIdelTimeout.setName(SESSION_IDLE_TIMEOUT); 
     propertySessionIdelTimeout.setValue(sessionTimeOut); 

     IdentityProviderProperty propertyRememberMeTimeout = new IdentityProviderProperty(); 
     propertyRememberMeTimeout.setName(REMEMBER_ME_TIMEOUT); 
     propertyRememberMeTimeout.setValue(rememberMeTimeOut); 

     IdentityProviderProperty[] idpProperties = new IdentityProviderProperty[2]; 
     idpProperties[0] = propertySessionIdelTimeout; 
     idpProperties[1] = propertyRememberMeTimeout; 

     identityProvider.setIdpProperties(idpProperties); 

     stub.updateResidentIdP(identityProvider); 

Для HomeRealmId при необходимости вы можете получить значение из результата stub.getResidentIdP()

+0

Эй. Спасибо за ответ. Означает ли это, что я могу использовать getResidentIdp() только для извлечения существующего значения из idp? –

+0

Да. Лучше, если можно получить значение из getResidentIdp() и создать новый объект IdentityProvider для обновления – Gayan