2016-08-04 5 views
0

PicketLink를 보안 프레임 워크로 사용하도록 Java EE 앱을 구성했습니다. 이 앱은 JBoss EAP 7 (또는 Wildfly 10)에서 실행되며 백엔드 데이터 저장소로 PostgreSQL 9.4를 사용하고 있습니다. 그래서 같은 PBKDF2 암호 인코딩을 사용하는 PicketLink IDM 프레임 워크를 초기화하고 있습니다 :이 구성PicketLink : '오류 : 암호 설정시 "UTF8"인코딩의 바이트 시퀀스가 ​​잘못되었습니다 : 0x00'

builder.named("MyApp").stores().jpa() 
     .setCredentialHandlerProperty(PasswordCredentialHandler.PASSWORD_ENCODER, 
       new PBKDF2PasswordEncoder("salty".getBytes(), 10000, 128)) 
     .addContextInitializer(new PicketLinkContextInitializer(this.entityManager)); 

, 암호 설정하려고 할 때 그러나, 나는 정기적으로 다음과 같은 예외를 얻을 :

Caused by: org.picketlink.idm.IdentityManagementException: PLIDM000201: Credential update failed for account [[email protected]] and type [[email protected]]. 
    at org.picketlink.idm.internal.ContextualIdentityManager.updateCredential(ContextualIdentityManager.java:235) [picketlink-idm-impl-2.7.0.Final.jar:] 
    at org.picketlink.idm.internal.ContextualIdentityManager.updateCredential(ContextualIdentityManager.java:217) [picketlink-idm-impl-2.7.0.Final.jar:] 
    at net.odyssi.identity.services.security.CredentialManager.changeAccountPassword(CredentialManager.java:75) [IdentityPlatform-ejb-0.1-SNAPSHOT.jar:] 
    ... 175 more 
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.DataException: could not execute statement 
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1692) [hibernate-entitymanager-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602) [hibernate-entitymanager-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1608) [hibernate-entitymanager-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1303) [hibernate-entitymanager-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    at org.jboss.as.jpa.container.AbstractEntityManager.flush(AbstractEntityManager.java:459) [wildfly-jpa-7.0.0.GA-redhat-2.jar:7.0.0.GA-redhat-2] 
    at org.picketlink.idm.jpa.internal.JPAIdentityStore.storeCredential(JPAIdentityStore.java:912) [picketlink-idm-impl-2.7.0.Final.jar:] 
    at org.picketlink.idm.credential.handler.AbstractCredentialHandler.update(AbstractCredentialHandler.java:225) [picketlink-idm-api-2.7.0.Final.jar:] 
    at org.picketlink.idm.credential.handler.AbstractCredentialHandler.update(AbstractCredentialHandler.java:51) [picketlink-idm-api-2.7.0.Final.jar:] 
    at org.picketlink.idm.internal.AbstractIdentityStore.updateCredential(AbstractIdentityStore.java:145) [picketlink-idm-impl-2.7.0.Final.jar:] 
    at org.picketlink.idm.internal.ContextualIdentityManager.updateCredential(ContextualIdentityManager.java:231) [picketlink-idm-impl-2.7.0.Final.jar:] 
    ... 177 more 
Caused by: org.hibernate.exception.DataException: could not execute statement 
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:118) [hibernate-core-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) [hibernate-core-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109) [hibernate-core-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:95) [hibernate-core-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:207) [hibernate-core-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:45) [hibernate-core-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2886) [hibernate-core-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3386) [hibernate-core-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:89) [hibernate-core-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:560) [hibernate-core-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:434) [hibernate-core-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:337) [hibernate-core-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39) [hibernate-core-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1282) [hibernate-core-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1300) [hibernate-entitymanager-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    ... 183 more 
Caused by: org.postgresql.util.PSQLException: ERROR: invalid byte sequence for encoding "UTF8": 0x00 
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2198) 
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1927) 
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:561) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:419) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:365) 
    at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:537) 
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:204) [hibernate-core-5.0.9.Final-redhat-1.jar:5.0.9.Final-redhat-1] 
    ... 193 more 

I을 오류가 매번 발생하는 것처럼 보이지 않기 때문에 주기적으로 말하십시오. 적은 수의 암호 (< 5)를 문제없이 설정할 수 있습니다. 그러나 대량으로 사용자 계정을 만들려고하면 오류가 발생할 때마다 발생합니다. 또한 내가 만드는 계정의 수에 관계없이 가끔씩 자르기가 나타납니다.

왜이 오류가 발생하는지 또는 어떻게 해결할 수 있습니까?

답변

0

PostgreSQL에서 허용되지 않는 문자열 데이터 형식의 테이블 열에 0 바이트를 저장하려고합니다.

임의의 바이너리 데이터를 저장하는 데 사용할 수있는 PostgreSQL 데이터 유형 bytea을 대신 사용하십시오.

+0

예, 알고 있습니다. 제 질문은 PicketLink와 왜 그것을하고 있는지/어떻게 해결할 수 있는지에 관한 것입니다. – Shadowman

+0

PicketLink가 테이블을 만들었습니까? 그렇다면 문제를 해결해야합니다. –