2012-03-12 19 views
2

JBossセキュリティドメインを使用してデータベースパスワードを暗号化しようとしています。データソースパスワードの暗号化:java.lang.SecurityException:認証されていない呼び出し元:null

次のようにデータソースがOracle-ds.xmlファイルで定義されています

<datasources> 
    <local-tx-datasource> 
    <jndi-name>OracleDS</jndi-name> 
    <connection-url>jdbc:oracle:thin:@dbhost:1521:db</connection-url> 
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> 
    <!-- app works fine when you use unencrypted password like this 
    <user-name>username</user-name> 
    <password>unencrypted_pass</password> 
    --> 
    <!-- Use the security domain defined in conf/login-config.xml for username and encrypted password--> 
    <security-domain>Encrypt-my-Password</security-domain> 
....etc 

login-config.xmlファイルは、このエントリが含まれています

<application-policy name="Encrypt-my-Password"> 
       <authentication> 
        <login-module 
          code="com.mycompany.global.er.util.ErSecureIdentityLoginModule" 
          flag="required"> 
          <module-option name="username">databaseUsername</module-option> 
          <module-option name="password">232487h4873hf4</module-option> 
          <module-option name="managedConnectionFactoryName">jboss.jca:service=LocalTxCM,name=OracleDS</module-option> 
        </login-module> 
      </authentication> 
    </application-policy> 

NB ErSecureIdentityLoginModuleが既に使用されるクラスです別のアプリケーションでDBパスワードを暗号化/復号化することができます。

とすぐに私はあなたがデータソースにアクセスしようとすると、次のようにアプリケーションが例外をスローし、この設定使用し始めた:

 
java.lang.SecurityException: Unauthenticated caller:null 
    org.jboss.security.integration.JBossSecuritySubjectFactory.createSubject(JBossSecuritySubjectFactory.java:92) 
    org.jboss.resource.connectionmanager.BaseConnectionManager2.getSubject(BaseConnectionManager2.java:687) 
    org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:495) 
    org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:941) 
    org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:89) 
    org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:92) 
    org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:111) 
    org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101) 
    org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325) 
    org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) 
    org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669) 
    org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126) 
    javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52) 
    javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34) 
    com.mycompany.er.batch.data.DbHelper.createEntityManager(DbHelper.java:30) 
    com.mycompany.er.batch.data.DbHelper.createAndBegin(DbHelper.java:49) 
    com.mycompany.er.basman.HibernateTransactionFilter.doFilter(HibernateTransactionFilter.java:53) 
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 

は、私は、JBoss 5.0.1GAのソースコードをダウンロードして有効にTRACEでデバッグを。 NullPointerExceptionがorg.jboss.resource.security.SubjectActionsにこのコード行を指し

2012-03-12 18-13-40:Login failure 
javax.security.auth.login.LoginException: java.lang.NullPointerException 
     at org.jboss.resource.security.SubjectActions$AddPrincipalsAction.run(SubjectActions.java:101) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at org.jboss.resource.security.SubjectActions.addPrincipals(SubjectActions.java:139) 
     at org.jboss.resource.security.ConfiguredIdentityLoginModule.login(ConfiguredIdentityLoginModule.java:98) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at javax.security.auth.login.LoginContext.invoke(LoginContext.java:769) 
     at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186) 
     at javax.security.auth.login.LoginContext$4.run(LoginContext.java:683) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680) 
     at javax.security.auth.login.LoginContext.login(LoginContext.java:579) 
     at org.jboss.security.plugins.auth.JaasSecurityManagerBase.defaultLogin(JaasSecurityManagerBase.java:552) 
     at org.jboss.security.plugins.auth.JaasSecurityManagerBase.authenticate(JaasSecurityManagerBase.java:486) 
     at org.jboss.security.plugins.auth.JaasSecurityManagerBase.isValid(JaasSecurityManagerBase.java:365) 
     at org.jboss.security.plugins.JaasSecurityManager.isValid(JaasSecurityManager.java:160) 
     at org.jboss.security.integration.JBossSecuritySubjectFactory.createSubject(JBossSecuritySubjectFactory.java:9 
0) 

:あり生産興味深いスタックトレースがある

 


     static class AddPrincipalsAction implements PrivilegedAction 
     { 
      Subject subject; 
      Principal p; 
      AddPrincipalsAction(Subject subject, Principal p) 
      { 
      this.subject = subject; 
      this.p = p; 
      } 
      public Object run() 
      { 
      subject.getPrincipals().add(p); 
      return null; 
      } 
     } 

しかし、これはあまり助けにはならない、と私は何が間違っているのか理解できません。 ヘルプ!

答えて

1

私はそれ以来この仕事をしています。オプションのjbossコンポーネントをいくつか削除しなければならなかったのですが、どうやってそれを正確に修正したかは100%明確ではありません。 1つの可能性は、パスワードの暗号化が正しくないことです。つまり、暗号化に間違ったライブラリを使用していたため、正しく復号化されませんでした。

関連する問題