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を使用できないのに、他のコントローラーで使用できるのはなぜですか?