使用API​​,而不是SQL查询中的Openfire

问题描述:

验证用户是否可以使用API​​,而不是按照用户身份验证的SQL查询中的Openfire性质:
jdbcAuthProvider.passwordSQL:SELECT用户名FROM chat_authentication其中username =?使用API​​,而不是SQL查询中的Openfire

基本上,在我们的MySQL数据库chat_authentication表不正常,因此某些用户的条目不存在于表中。所以我想直接打到API(故障率很低)。在这种情况下我怎么能做到这一点?

你必须创建自己的类来代替Openfire的DefaultAuthProvider.class

灿的样子:

import org.jivesoftware.openfire.auth.AuthProvider 
public class MyAuthProvider implements AuthProvider 

,正确实现了所有的方法。

作为替代,你可以延伸的DefaultAuthProvider并覆盖所有的方法

  • 公共无效身份验证(字符串用户名,字符串密码)抛出UnauthorizedException
  • 公共无效身份验证(字符串username,字符串令牌,字符串摘要)抛出未授权的异常
  • getPassword(String)
  • public boolean checkPassword(String username,String testPassword)throws UserNotFoundException
  • public void setPassword(String username,String password)。

最后,让你的类的罐子,在openfireDirectory/lib部署,并与您MyAuthProvider全名更改的属性

provider.auth.className 

值。 你可以做到这一点

  • 通过管理控制台面板 - >服务器 - >系统属性
  • 或数据库更新OfProperty表。

之后,您必须关闭并启动Openfire。

+0

但是为此:1.我必须了解整个JDBCAuthProvider类,以便正确理解。 2. JDBCAuth中的用户创建方法怎么样? –

+0

这可能是另一种方式,更复杂。只需检查Openfire的源代码,解释的时间真的很长,但在源代码中有很多注释和很多使用的属性(jdbcAuthProvider.xyz) – MrPk