0

これは私の META-INF/spring/beans.xml です

<bean id="securityManager" class="org.apache.shiro.mgt.DefaultSecurityManager" />

<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>

<!-- Enable Shiro Annotations for Spring-configured beans.  Only run after -->
<!-- the lifecycleBeanProcessor has run: -->
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="staticMethod" value="org.apache.shiro.SecurityUtils.setSecurityManager"/>
    <property name="arguments" ref="securityManager"/>
</bean>

私がそれをテストしようとしているとき:

public static void main(String[] args) throws Exception {

    SecurityUtils.getSecurityManager()

}

このエラーが発生しました:

org.apache.shiro.UnavailableSecurityManagerException: No SecurityManager accessible to the calling code, either bound to the org.apache.shiro.util.ThreadContext or as a vm static singleton.  This is an invalid application configuration.
4

1 に答える 1

3

Spring 環境で定義されたオブジェクトを参照するには、最初に Spring 環境を作成する必要があります。これは Spring Web アプリケーションでは自動的に行われますが、(上記のように) スタンドアロン アプリを使用している場合は、自分で Spring を起動する必要があります。

これを試して:

import org.apache.shiro.mgt.SecurityManager;
...

public static void main(String[] args) throws Exception {

    String resource = "/META-INF/spring/beans.xml";

    ClassPathXmlApplicationContext appCtx = 
        new ClassPathXmlApplicationContext(resource);

    SecurityManager securityManager = 
        (SecurityManager)appCtx.getBean("securityManager");

    SecurityUtils.setSecurityManager(securityManager);

}
于 2013-01-18T01:21:38.717 に答える