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地址,多出来的列不处理。
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地址,多出来的列不处理。
相关文章推荐
- Struts2+Spring 整合成功测试案例--整合过程中遇到的问题及解决方法(一)
- Oracle 中用户登录时遇到user test lacks create session privilege logon denied解决方法
- maven整合到eclipse中的android项目遇到的几个问题及解决方法
- Spring2.5,Activemq5.2整合遇到的问题以及解决方法
- Android实现QQ新用户注册界面遇到问题及解决方法
- 关于openfire的用户不能正常登陆的解决方法
- STM32F4学习笔记2——自建库函数整合FFT计算遇到的问题及解决方法
- 学习韩顺平校内网项目时遇到的问题及解决方法之用eclipse整合hibernate
- 在整合spring-flex时遇到问题及解决方法
- 在sps中遇到“不能添加用户,用户名已经存在”的问题的解决方法
- OpenID与传统Email用户身份认证模式整合时的安全问题和解决方法
- 在做CRM界面的时候遇到的DIV滚动条自动显示的问题!!和解决方法!
- 编译升级linux由2.4.20-8到2.6.10内核时,遇到的错误,以及解决方法
- ASP.NET仅配置数据库MSDE出现"用户 ’机器名/ASPNET’ 登录失败 解决方法
- 项目中遇到的一些小问题及解决方法
- 用户 'NT AUTHORITY\NETWORK SERVICE' 登录失败的解决方法
- 用户'MYCOMPUTER\ASPNET' 登录失败”的解决方法
- 在VS.NET 2003中建立项目时遇到的两个问题及解决方法 (转)
- 在PPC上用时间做唯一编号遇到的问题及其解决方法
- ASP.NET中IP地址,当前用户的方法属性大整合- -