j0c*_*ch3 9 java mysql oracle jboss
我在JBOSS上登录我的Java应用程序时遇到问题.我使用JBOSS 7.1.1的数据库登录模块
测试环境是在MySQL数据库上.一切都很好,没有问题.应用程序正确部署,我可以登录到我的应用程序.
现在要进行生产,必须将DBMS更改为Oracle.这里也部署了一切.我可以用浏览器打开应用程序.但是无法登录.每当我试图登录自己时,日志说:PB00019: Processing Failed:No matching username found in Principals.
这是我对登录模块的配置:
<security-domain name="apdomainhashed" cache-type="default">
<authentication>
<login-module code="Database" flag="required">
<module-option name="dsJndiName" value="java:jboss/datasources/MySqlDS"/>
<module-option name="principalsQuery" value="SELECT PASSWORD FROM TBLUSERS WHERE USERNAME=?"/>
<module-option name="rolesQuery" value="SELECT r.rolename, 'Roles' FROM TBLUSERS u INNER JOIN TBLUSER_GROUPS ug ON u.id = ug.users_id INNER JOIN TBLGROUPS g ON g.id = ug.groups_id INNER JOIN TBLGROUPS_ROLES gr ON gr.groups_id = g.id INNER JOIN TBLROLES r ON r.id = gr.roles_id WHERE u.username=? AND u.active=1"/>
<module-option name="hashAlgorithm" value="SHA-512"/>
<module-option name="hashEncoding" value="BASE64"/>
<module-option name="hashStorePassword" value="false"/>
<module-option name="hashUserPassword" value="true"/>
<module-option name="passwordIsA1Hash" value="true"/>
</login-module>
</authentication>
</security-domain>
Run Code Online (Sandbox Code Playgroud)
如果我手动发送查询,我会收到正确的值:
SELECT PASSWORD FROM TBLUSERS WHERE USERNAME='admin';
PASSWORD
----------
c0jKLdIKuAJCrwhcmV4dkZftUWIiv1iT51Oupznz730D8+WGVoSh2j/Ou79p1L9H8YyLB1Ssrbbd\nG2D0ZSBmvw==
Run Code Online (Sandbox Code Playgroud)
这是失败登录的完整跟踪:
07:44:31,291 TRACE [org.jboss.security.authentication.JBossCachedAuthenticationManager] (http--0.0.0.0-8080-6) Begin isValid, principal:admin, cache entry: null
07:44:31,292 TRACE [org.jboss.security.authentication.JBossCachedAuthenticationManager] (http--0.0.0.0-8080-6) defaultLogin, principal=admin
07:44:31,292 TRACE [org.jboss.security.auth.login.XMLLoginConfigImpl] (http--0.0.0.0-8080-6) Begin getAppConfigurationEntry(apdomainhashed), size=4
07:44:31,293 TRACE [org.jboss.security.auth.login.XMLLoginConfigImpl] (http--0.0.0.0-8080-6) End getAppConfigurationEntry(apdomainhashed), authInfo=AppConfigurationEntry[]:
[0]
LoginModule Class: org.jboss.security.auth.spi.DatabaseServerLoginModule
ControlFlag: LoginModuleControlFlag: required
Options:
name=hashUserPassword, value=true
name=hashAlgorithm, value=SHA-512
name=principalsQuery, value=SELECT PASSWORD FROM TBLUSERS WHERE USERNAME=?
name=passwordIsA1Hash, value=true
name=hashEncoding, value=BASE64
name=dsJndiName, value=java:jboss/datasources/MySqlDS
name=hashStorePassword, value=false
name=rolesQuery, value=SELECT r.rolename, 'Roles' FROM TBLUSERS u INNER JOIN TBLUSER_GROUPS ug ON u.id = ug.users_id INNER JOIN TBLGROUPS g ON g.id = ug.groups_id INNER JOIN TBLGROUPS_ROLES gr ON gr.groups_id = g.id INNER JOIN TBLROLES r ON r.id = gr.roles_id WHERE u.username=? AND u.active=1
07:44:31,296 TRACE [org.jboss.security.auth.spi.DatabaseServerLoginModule] (http--0.0.0.0-8080-6) initialize
07:44:31,297 TRACE [org.jboss.security.auth.spi.DatabaseServerLoginModule] (http--0.0.0.0-8080-6) Security domain: apdomainhashed
07:44:31,297 TRACE [org.jboss.security.auth.spi.DatabaseServerLoginModule] (http--0.0.0.0-8080-6) Password hashing activated: algorithm = SHA-512, encoding = BASE64, charset = {default}, callback = null, storeCallback = null
07:44:31,298 TRACE [org.jboss.security.auth.spi.DatabaseServerLoginModule] (http--0.0.0.0-8080-6) DatabaseServerLoginModule, dsJndiName=java:jboss/datasources/MySqlDS
07:44:31,299 TRACE [org.jboss.security.auth.spi.DatabaseServerLoginModule] (http--0.0.0.0-8080-6) principalsQuery=SELECT PASSWORD FROM TBLUSERS WHERE USERNAME=?
07:44:31,299 TRACE [org.jboss.security.auth.spi.DatabaseServerLoginModule] (http--0.0.0.0-8080-6) rolesQuery=SELECT r.rolename, 'Roles' FROM TBLUSERS u INNER JOIN TBLUSER_GROUPS ug ON u.id = ug.users_id INNER JOIN TBLGROUPS g ON g.id = ug.groups_id INNER JOIN TBLGROUPS_ROLES gr ON gr.groups_id = g.id INNER JOIN TBLROLES r ON r.id = gr.roles_id WHERE u.username=? AND u.active=1
07:44:31,301 TRACE [org.jboss.security.auth.spi.DatabaseServerLoginModule] (http--0.0.0.0-8080-6) suspendResume=true
07:44:31,302 TRACE [org.jboss.security.auth.spi.DatabaseServerLoginModule] (http--0.0.0.0-8080-6) login
07:44:31,303 TRACE [org.jboss.security.auth.spi.DatabaseServerLoginModule] (http--0.0.0.0-8080-6) suspendAnyTransaction
07:44:31,304 TRACE [org.jboss.security.auth.spi.DatabaseServerLoginModule] (http--0.0.0.0-8080-6) Excuting query: SELECT PASSWORD FROM TBLUSERS WHERE USERNAME=?, with username: admin
07:44:31,305 TRACE [org.jboss.security.auth.spi.DatabaseServerLoginModule] (http--0.0.0.0-8080-6) Query returned no matches from db
07:44:31,306 TRACE [org.jboss.security.auth.spi.DatabaseServerLoginModule] (http--0.0.0.0-8080-6) resumeAnyTransaction
07:44:31,306 TRACE [org.jboss.security.auth.spi.DatabaseServerLoginModule] (http--0.0.0.0-8080-6) abort
07:44:31,307 ERROR [org.jboss.security.authentication.JBossCachedAuthenticationManager] (http--0.0.0.0-8080-6) Login failure: javax.security.auth.login.FailedLoginException: PB00019: Processing Failed:No matching username found in Principals
Run Code Online (Sandbox Code Playgroud)
在MySQL下,列的数据类型是VARCHAR.现在使用oracle是VARCHAR2.
有谁知道为什么我无法使用oracle作为数据源登录?
小智 1
您在任何地方都使用“java:jboss/datasources/MySqlDS”JNDI 名称。是否指定了旧数据源或者旧名称仍然存在?换句话说,MySqlDS实际上指定了与Oracle的连接吗?