无法在Spring Decorator控制器中使用Shiro的主题

时间:2012-09-25 15:14:17

标签: spring shiro sitemesh

我正在使用Spring和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,但我可以在其他控制器中使用它?

1 个答案:

答案 0 :(得分:0)

Coworker发现问题在于创建bean的顺序。在定义Sitemesh之前,应该出现Shiro过滤器的定义。