我通过在数据库表OFPRORERTY里设置各种属性进行openfire用户整合时,遇到了以下异常:
- Exception:
- java.lang.UnsupportedOperationException
- at org.jivesoftware.openfire.user.JDBCUserProvider.createUser(JDBCUserProvider.java:170)
- at org.jivesoftware.openfire.auth.JDBCAuthProvider.createUser(JDBCAuthProvider.java:404)
- at org.jivesoftware.openfire.auth.JDBCAuthProvider.authenticate(JDBCAuthProvider.java:133)
1 jdbcUserProvider.loadUserSQL的值设置的不正确。
这种情况下,一般是SQL写错了,将jdbcUserProvider.loadUserSQL的SQL在DB浏览工具(我用的是DBVisualizer)中执行,测试一下有没有写错。
2 jdbcProvider.connectionString和jdbcProvider.driver设置错误,或者没有设置
这种情况下,也是通过DB浏览工具,使用jdbcProvider.connectionString和jdbcProvider.driver的设置配置数据库连接,检测
是否能正确连接数据库。
3 jdbcUserProvider.useConnectionProvider未设置为true
前面两步都设置好了,忙了半天,网上的资料有些就没有提到jdbcUserProvider.useConnectionProvider的设置,
导致我们前面两项设置没有起到任何的作用。
一定要将jdbcUserProvider.useConnectionProvider设置为true,我们的设置才有效。
以此类推,在定义认证及群组时,也
要将相关的配置设置为true,以启用我们自己的配置。
---------------网上的各种用户整合资料很多,就不在多说,下面把我的配置贴出来以做参考---------------
---------------我的OF_PERSON_TEST表不在SYSTEM下,在自己创建的ASSET下,所以在表名前加上ASSET.---
passwordKey
6g7Ut3fGLi42wWu
xmpp.socket.ssl.active true
xmpp.domain test-pc
provider.admin.className org.jivesoftware.openfire.admin.DefaultAdminProvider
provider.lockout.className org.jivesoftware.openfire.lockout.DefaultLockOutProvider
jdbcUserProvider.useConnectionProvider true
provider.auth.className org.jivesoftware.openfire.auth.JDBCAuthProvider
xmpp.auth.anonymous true
provider.group.className org.jivesoftware.openfire.group.DefaultGroupProvider
provider.vcard.className org.jivesoftware.openfire.vcard.DefaultVCardProvider
provider.securityAudit.className org.jivesoftware.openfire.security.DefaultSecurityAuditProvider
xmpp.session.conflict-limit 0
update.lastCheck 1405315189084
jdbcAuthProvider.passwordSQL SELECT VC_PWD FROM ASSET.OF_PERSON_TEST WHERE VC_ID=?
jdbcAuthProvider.passwordType plain
jdbcAuthProvider.passwordType plain
jdbcProvider.connectionString jdbc:oracle:thin:@193.160.16.86:1521/orcl.com
jdbcProvider.driver oracle.jdbc.driver.OracleDriver
admin.authorizedJIDs test@test-PC
jdbcAuthProvider.useConnectionProvider true
provider.user.className org.jivesoftware.openfire.user.JDBCUserProvider
jdbcUserProvider.allUsersSQL SELECT VC_NAME FROM ASSET.OF_PERSON_TEST
jdbcUserProvider.userCountSQL SELECT count(*) FROM ASSET.OF_PERSON_TEST
jdbcUserProvider.usernameField VC_NAME <---从源代码来看,没有实际用途,随便配置上就行
jdbcUserProvider.nameField name<---<---从源代码来看,没有实际用途,随便配置上就行
jdbcUserProvider.emailField email<---<---从源代码来看,没有实际用途,随便配置上就行
jdbcUserProvider.loadUserSQL SELECT VC_USERNAME,VC_EMAIL,VC_OTHER FROM ASSET.OF_PERSON_TEST WHERE VC_ID=? <---从源代码来看,检索出来的结果至少要有两列,第一列做为用户名称,第二列做为email地址,多出来的列不处理。
xmpp.socket.ssl.active true
xmpp.domain test-pc
provider.admin.className org.jivesoftware.openfire.admin.DefaultAdminProvider
provider.lockout.className org.jivesoftware.openfire.lockout.DefaultLockOutProvider
jdbcUserProvider.useConnectionProvider true
provider.auth.className org.jivesoftware.openfire.auth.JDBCAuthProvider
xmpp.auth.anonymous true
provider.group.className org.jivesoftware.openfire.group.DefaultGroupProvider
provider.vcard.className org.jivesoftware.openfire.vcard.DefaultVCardProvider
provider.securityAudit.className org.jivesoftware.openfire.security.DefaultSecurityAuditProvider
xmpp.session.conflict-limit 0
update.lastCheck 1405315189084
jdbcAuthProvider.passwordSQL SELECT VC_PWD FROM ASSET.OF_PERSON_TEST WHERE VC_ID=?
jdbcAuthProvider.passwordType plain
jdbcAuthProvider.passwordType plain
jdbcProvider.connectionString jdbc:oracle:thin:@193.160.16.86:1521/orcl.com
jdbcProvider.driver oracle.jdbc.driver.OracleDriver
admin.authorizedJIDs test@test-PC
jdbcAuthProvider.useConnectionProvider true
provider.user.className org.jivesoftware.openfire.user.JDBCUserProvider
jdbcUserProvider.allUsersSQL SELECT VC_NAME FROM ASSET.OF_PERSON_TEST
jdbcUserProvider.userCountSQL SELECT count(*) FROM ASSET.OF_PERSON_TEST
jdbcUserProvider.usernameField VC_NAME <---从源代码来看,没有实际用途,随便配置上就行
jdbcUserProvider.nameField name<---<---从源代码来看,没有实际用途,随便配置上就行
jdbcUserProvider.emailField email<---<---从源代码来看,没有实际用途,随便配置上就行
jdbcUserProvider.loadUserSQL SELECT VC_USERNAME,VC_EMAIL,VC_OTHER FROM ASSET.OF_PERSON_TEST WHERE VC_ID=? <---从源代码来看,检索出来的结果至少要有两列,第一列做为用户名称,第二列做为email地址,多出来的列不处理。