因为眼花而引发的悲剧 -- Spring 整合Shiro框架中注入RolePermissionResolver到AuthorizingRealm...

本文记录了一次因字段名误配导致Shiro框架中RolePermissionResolver注入失败的问题及解决过程。作者自定义了UserRealm和MyRolePermissionResolver,并在Spring配置文件中尝试注入RolePermissionResolver,但因字段名不匹配导致异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为眼花而引发的悲剧 -- Shiro框架中注入RolePermissionResolver到AuthorizingRealm

 

使用shiro安全框架,自定义了一个Realm:

public class UserRealm extends AuthorizingRealm

 

AuthorizingRealm详细类型是:

public abstract class AuthorizingRealm extends AuthenticatingRealm

implements Authorizer, Initializable, PermissionResolverAware, RolePermissionResolverAware

 

另外,自定义了一个RolePermissionResolver如下:

public class MyRolePermissionResolver implements RolePermissionResolver

该RolePermissionResolver用于将角色字符串转换成该角色所包含的Permission的集合.

 

上面AuthenticatingRealm 中实现的RolePermissionResolverAware接口为:

 

public interface RolePermissionResolverAware {

    /**
     * Sets the specified <tt>RolePermissionResolver</tt> on this instance.
     *
     * @param rpr the <tt>RolePermissionResolver</tt> being set.
     */
    public void setRolePermissionResolver(RolePermissionResolver rpr);
}

 

 

注意这里的set方法,是setRolePermissionResolver

 

而AuthorizingRealm类中,却使用

 

private RolePermissionResolver permissionRoleResolver;

 

这个字段来保存这个set进来的RolePermissionResolver,

 

方法如下:

public void setRolePermissionResolver(RolePermissionResolver permissionRoleResolver) {
        this.permissionRoleResolver = permissionRoleResolver;
    }

 

 

    

 在配置spring注入的时候,想当然的使用

 <bean id="userRealm" class="com.jack_yin.mainframe.authorize.authentic.realm.UserRealm" >

    <!-- ...... -->

    <property name="permissionRoleResolver" ref="myRolePermissionResolver"/>

 </bean>

 

 (这里这么注入是因为之前还注入了private PermissionResolver permissionResolver; 这个字段是正常的和它的setter配套,

 并且shiro源码中,这个字段就和permissionRoleResolver放一起啊,太迷惑人了吧:

 

 

 

 导致各种异常报错,而且spring异常信息乱指,指向了自己实现的一个连接池,于是一阵折腾啊.

 最后发现连接池没问题啊,早上一来发现这个field和setter不配套啊,话说shiro中为什么要这样啊....

 这个问题折腾了整整一天加一个晚上啊....

 

 最后,修改了property 的name解决问题啊:

 <bean id="userRealm" class="com.jack_yin.mainframe.authorize.authentic.realm.UserRealm" >

    <!-- ...... -->

    <property name="rolePermissionResolver" ref="myRolePermissionResolver"/>

 </bean>

 

 泪奔,吐血中......

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值