关于shiro错误的分析
错误提示:
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.
错误原因:
在web.xml中配置shiro filter的时候,shiro filter放置位置放到了struts2 filter后面
原因分析:
如果使用struts2,那么在struts2加载静态资源的时候,需要将静态资源SecurityUtils也加载进去,如果将shiro filter放置位置放到了struts2 filter后面,那么必将导致无法加载到struts2中去,而后使用SecurityUtils.getSubject();的时候,导致出错,
解决办法:
shiro的filter应该放在struts2的 filter的上面
还可以在使用之前使用这种方式:即在SecurityUtils.getSubject();之前加入如下代码
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini"); // 创建SecurityManager (根据配置创建SecurityManager实例) SecurityManager security = factory.getInstance(); SecurityUtils.setSecurityManager(security);
这个想必不用解释了吧
by 刘迎光@萤火虫工作室
OpenBI交流群:495266201
MicroService 微服务交流群:217722918
mail: liuyg#liuyingguang.cn
博主首页(防止爬虫):http://blog.liuyingguang.cn
OpenBI问答社区:http://openbi.liuyingguang.cn/