No SecurityManager acce 关于spring静态注入securityManager的问题,Subject subject = SecurityUtils.getSubject()

深碍√TFBOYSˉ_ 2022-05-15 04:37 336阅读 0赞

遇到问题: 在接收mq队列进行逻辑处理,需要操作缓存时,在getSecurityManager()时,出现如下异常,即无法获取到securityManager对象。而在正常的系统登陆后操作缓存,却没有出现此问题。

70

原因在于项目在登陆成功后,已经在shiro过滤器中注入了该对象,而在消息队列消费过程中,此对象仍然为空,故在获取session去操作缓存过程中,因为获取不到securityManager对象,从而出现异常。

70 1

于是需要对securityManager进行静态注入,

70 2

  1. <!-- 静态注入,相当于调用SecurityUtils.setSecurityManager(securityManager) -->
  2. <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
  3. <property name="staticMethod" value="org.apache.shiro.SecurityUtils.setSecurityManager"/>
  4. <property name="arguments" ref="securityManager" />
  5. </bean>

即在任意首次静态方法调用时,就会将其注入进来。

如果arguments 是多个,采用 List 赋值。

  1. <!-- 静态注入,相当于调用SecurityUtils.setSecurityManager(securityManager) -->
  2. <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
  3. <property name="staticMethod" value="org.apache.shiro.SecurityUtils.setSecurityManager"/>
  4. <property name="arguments">
  5. <list>
  6. <value>securityManager</value>
  7. </list>
  8. </property>
  9. </bean>

因此,问题得到解决。

参考地址:https://www.sojson.com/blog/157.html

发表评论

表情:
评论列表 (有 0 条评论,336人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Subject主体作用?

    用来协调内部各安全组件,通过它提供安全管理的各种服务,正与系统交互的人,或某一个第三方服务。 Subject:主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应

    相关 Subject

    Subject Subject可以看成是一个桥梁或者代理,在某些ReactiveX实现中(如RxJava),它同时充当了Observer和Observable的角色。因为