Tag - shiro

java shiro    2017-07-19 23:47:07    336

关于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/

java shiro    2017-07-19 23:45:15    230

org.apache.shiro.authc.IncorrectCredentialsException: Submitted credentials for token [org.apache.shiro.authc.UsernamePasswordToken - **, rememberMe=false] did not match the expected credentials.

shiro在实现登陆认证的时候,一般从前端传来的是明文密码,而我们库中存放的是hash值,于是我们就需要转换下user的密码,

当然,我们有可能会在使用验证查询的时候,将user的密码转换成hash,然而在loginAction中,存放的user中的密码仍为明文,此时会出现错误

解决办法,在loginAction获取到pwd后,将其替换为hash,然后认证成功后存放到session中就ok了

 

user.setPwd(MD5Util.md5(user.getPwd())); 

 

by 刘迎光@萤火虫工作室
OpenBI交流群:495266201
MicroService 微服务交流群:217722918
mail: liuyg#liuyingguang.cn
博主首页(防止爬虫):http://blog.liuyingguang.cn
OpenBI问答社区:http://openbi.liuyingguang.cn/