3-8节课中shiro相关问题

来源:3-10 基于Apache Shiro权限管理Case实操-2

吐槽者

2018-06-12

老师我想问一下这个章节中第一次简单搭建完成运行登录一直登录不进去,密码正常也进不去,打印了一下登录方法里面catch异常和正常情况下都有进入,是什么原因?

写回答

5回答

吐槽者

提问者

2018-06-13

老师,我觉得你这边要添加一些关于md5加密的东西才可以,不过我不知道怎么整合进去

0
5
Jimin
回复
吐槽者
实在不行就用课程提供的源码改成本地的数据库试试看,如果源码没问题,就代表还是你那里代码有问题,如果源码和你自己的代码有相同的问题,那可能是环境有问题。
2018-06-13
共5条回复

Jimin

2018-06-13

这个错之前很多同学遇到过,但出问题的点都不太一样,我罗列一下你分别检查一下看看。

1、保证代码数据库连接正确。课程里application.properties里的数据库配置要保证换成了自己可以连接的。
2、用户名密码是否正确。课程默认sql里给的可登陆账户为:用户名admin,密码123
3、如果用户名密码没问题,需要确认一下CredentialMatcher里是否也是使用明文做的等值检查,这是如果修改也可能出现问题。
public class CredentialMatcher extends SimpleCredentialsMatcher {

   @Override
   public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
       UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) token;
       String password = new String(usernamePasswordToken.getPassword());
       String dbPassword = (String) info.getCredentials();
       return this.equals(password, dbPassword);
   }
}
4、如果上面两点也都没有问题,那么检查一下你的mybatis里的sql是否拼写错误,之前有同学犯过类似的错误。感觉自己和课程里的一样,实际上有差别,我这里也贴一份出来,必要的时候你可以覆盖一下:
<mapper namespace="com.mmall.demo2.mapper.UserMapper">

   <resultMap id="userMap" type="com.mmall.demo2.model.User">
       <id property="uid" column="uid" />
       <result property="username" column="username" />
       <result property="password" column="password" />
       <collection property="roles" ofType="com.mmall.demo2.model.Role">
           <id property="rid" column="rid" />
           <result property="rname" column="rname" />
           <collection property="permissions" ofType="com.mmall.demo2.model.Permission">
               <id property="pid" column="pid" />
               <result property="name" column="name"/>
               <result property="url" column="url" />
           </collection>
       </collection>
   </resultMap>

   <select id="findByUsername" parameterType="string" resultMap="userMap">
     SELECT u.*, r.*, p.*
     FROM user u
       INNER JOIN user_role ur on ur.uid = u.uid
       INNER JOIN role r on r.rid = ur.rid
       INNER JOIN permission_role pr on pr.rid = r.rid
       INNER JOIN permission p on pr.pid = p.pid
     WHERE u.username = #{username}
   </select>
</mapper>

5、配置细节不对,比如mybatis配置扫描路径mappers写成mapper的
理论上你贴的异常跟进去还会看到更详细的问题点,你先按照这几个方向对照检查一下看看。

0
2
Jimin
回复
吐槽者
catch里的异常,应该会有更详细的才对,打印出来看更容易些,可能最详细的被包裹里好几层,需要点几层进去才可以。你看看能否找出本质的异常说明,我现在感觉还是配置哪里的问题
2018-06-13
共2条回复

吐槽者

提问者

2018-06-13

老师,异常报这个错,怎么改

Authentication failed for token submission [org.apache.shiro.authc.UsernamePasswordToken - 11, rememberMe=false].  Possible unexpected error? (Typical or expected login exceptions should extend from AuthenticationException).

0
0

吐槽者

提问者

2018-06-12

好的,谢谢老师

0
0

Jimin

2018-06-12

你好,走到catch的异常里时,拿一下异常的具体说明,走到这里代码认证失败,那里会给出错误的原因,之后代码就会走到登录页,代表登录失败

0
0

Java开发企业级权限管理系统

源于企业真实Java项目,涉及大量高级技巧,覆盖权限管理开发技术

2261 学习 · 1347 问题

查看课程