gpt4 book ai didi

java - Shiro 自定义 JDBC 领域

转载 作者:行者123 更新时间:2023-12-01 10:36:37 32 4
gpt4 key购买 nike

我正在摆弄 Shiro 安全框架并实现自定义 JDBC 领域。

以下值当前在我的 shiro.ini 文件中设置

jdbcRealm.authenticationQuery = SELECT password FROM user WHERE username = ?

我的问题是,如果我扩展JdbcRealm并覆盖其doGetAuthenticationInfo(AuthenticationToken token)方法,将在我的jdbcRealm.authenticationQuery中设置>shiro.ini 文件仍然被调用吗?或者方法覆盖是否优先于 shiro.ini 文件中的设置?

public class CustomJdbcRealm extends JdbcRealm 
{
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException
{
// Connect to DB to get password and salt values
}
}

最佳答案

doGetAuthenticationInfo 是从数据库完成身份验证的主要方法。因此,如果您通常覆盖它,您就会覆盖身份验证过程。因此,最好先调用父类(super class)方法,然后获取其 ino,然后使用它,这样您就不必更改任何内容。 shiro.ini 中的 sql 也会自动映射。并且在您覆盖之前它们不会更改
setAuthenticationQuery、setUserRolesQuery 等

您可以轻松调用以下方法来模拟实际流程,然后进行自定义。

AuthenticationInfo  info = super.doGetAuthenticationInfo(token); 

请注意,super 是对父级的引用,但 super() 是它的构造函数。

喜欢:

public class CustomJdbcRealm extends JdbcRealm 
{
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException
{

AuthenticationInfo info = super.doGetAuthenticationInfo(token);
// Your own code here
}
}

关于java - Shiro 自定义 JDBC 领域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34681560/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com