我正在搞乱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
}
}
答案 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
}
}