0

Spring with Shiroを使用しています。Springプロジェクトには、sitemeshを介してデコレータページを表示するデコレータコントローラがあります。デコレータページは、ログインやログアウトなど、すべてのページナビゲーションリンクに追加されます。

誰かが実際にログインしているかどうかに基づいてログインとログアウトを表示したいので、その方法を考えました。

@Controller
public class DecoratorController extends AbstractController{

 @Override
 @RequestMapping(value = "/decorator.htm")
 protected ModelAndView handleRequestInternal(HttpServletRequest request,
    HttpServletResponse response) throws Exception {

    ModelAndView model = new ModelAndView("DecoratorPage");

    Subject currentUser = SecurityUtils.getSubject();

    if (currentUser.isAuthenticated())
        model.addObject("login", "display: none;");
    else
        model.addObject("logout", "display: none;");

    return model;
 }
}

sitemesh.xml:

<sitemesh>
  <mapping path="/*.htm" decorator="/decorator.htm"/>
</sitemesh>

ただし、これによりエラーが発生します。

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.

ここでShiroを使用できないのに、他のコントローラーで使用できるのはなぜですか?

4

1 に答える 1

0

同僚は、問題がBeanの作成順序にある​​ことを発見しました。Sitemeshを定義する前に、Shiroフィルターの定義を表示する必要があります。

于 2012-11-13T18:11:32.393 に答える