Shiro自定义JDBC领域

时间:2016-01-08 16:21:23

标签: java apache shiro

我正在搞乱Shiro Security Framework并实现自定义JDBC领域。

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

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

我的问题是,如果我扩展 JdbcRealm 并覆盖其 doGetAuthenticationInfo(AuthenticationToken令牌)方法, 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
    }
}

1 个答案:

答案 0 :(得分:2)

doGetAuthenticationInfo是从数据库进行身份验证的主要方法。因此,如果您覆盖它,通常会覆盖身份验证过程。因此,首先调用超类方法然后获取它的ino然后使用它,这样你就不必改变任何东西了。此外,shiro.ini中的sqls也会自动映射。并且在你覆盖
之前不会改变它们 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 
    }
}