您的位置:首页 > 运维架构

openfire用户整合遇到UnsupportedOperationException异常及解决方法

2014-07-14 16:52 204 查看
我通过在数据库表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)

通过网上调查,一般是jdbcUserProvider.loadUserSQL的值不正确,通过openfire的源代码分析,我把我看到的几种原因都列出来:
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地址,多出来的列不处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐