使用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。
但是为此:1.我必须了解整个JDBCAuthProvider类,以便正确理解。 2. JDBCAuth中的用户创建方法怎么样? –
这可能是另一种方式,更复杂。只需检查Openfire的源代码,解释的时间真的很长,但在源代码中有很多注释和很多使用的属性(jdbcAuthProvider.xyz) – MrPk