当前位置:首页 > 行业动态 > 正文

ssm整合shiro登录报错

在SSM(Spring、SpringMVC、MyBatis)框架中整合Shiro进行登录认证时,可能会遇到一些报错,下面将针对一些常见的错误进行分析和解答。

我们要明确Shiro是一个强大的安全框架,它提供了认证、授权、加密和会话管理等功能,在整合Shiro时,我们需要关注以下几个方面:依赖配置、Shiro配置、Realm实现、过滤器配置等。

以下是针对一些常见错误的分析和解决方案:

1、提交的凭据与预期凭据不匹配

错误信息类似于:"Submitted credentials for token [org.apache.shiro.authc.UsernamePasswordToken 1300, rememberMefalse] did not match the expected credentials."

这个错误通常表示用户输入的账号密码与系统中的账号密码不匹配,解决这个问题,我们需要从以下几个方面进行检查:

确认前端传递的账号密码参数名称是否与Shiro配置的参数名称一致。

检查Shiro的Realm实现,确保从数据库中查询的账号密码是正确的。

检查账号密码的加密方式,确保前端传递的密码与数据库中存储的密码加密方式一致。

2、SecurityManager已定义且禁止覆盖

错误信息类似于:"The bean ‘securityManager’, defined in class path resource [org/apache/shiro/spring/config/web/autoconfigure/ShiroWebAutoConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [com/xlhj/shiro/config/ShiroConfig.class] and overriding is disabled."

这个错误通常表示在Spring容器中已经定义了一个名为’securityManager’的Bean,且禁止覆盖,解决这个问题,我们可以采取以下措施:

检查项目中是否有多个地方定义了’securityManager’的Bean,只保留一个定义即可。

如果需要在不同的配置文件中定义’securityManager’,可以通过设置spring.main.allowbeandefinitionoverriding=true来允许覆盖。

3、No SecurityManager accessible

错误信息类似于:"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."

这个错误通常表示在调用代码中没有可访问的SecurityManager,解决这个问题,我们需要检查以下方面:

确保在web.xml中配置了ShiroFilter,且配置内容无误。

确保ShiroFilter的配置在StrutsFilter之前。

检查Shiro的配置文件,确保SecurityManager已经正确初始化并绑定到ThreadContext。

4、无法创建shiroFilterFactoryBean

错误信息类似于:"无法创建shiroFilterFactoryBean"

这个问题可能是由于以下原因引起的:

在@Configuration注解的配置类中,@Autowired注解失效,导致无法注入服务。

LifecycleBeanPostProcessor导致@Autowired注解失效,可以尝试注释掉这个Bean,然后检查其他Bean的注入情况。

解决这个问题的方法如下:

确保在@Configuration注解的配置类中,@Autowired注解使用正确。

逐一注释配置类中的Bean,测试哪个Bean导致注入失败。

如果是LifecycleBeanPostProcessor导致的问题,可以考虑将其移除,并在其他地方管理Shiro的生命周期。

在SSM框架中整合Shiro时,遇到报错是很常见的问题,我们需要从错误信息中找到关键信息,分析可能的原因,并逐一排除,在解决问题的过程中,保持代码的整洁和配置的正确性非常重要,通过以上分析,相信大家能够更好地解决在整合Shiro过程中遇到的问题。

0