请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

3-8节课中shiro相关问题

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

正在回答 回答被采纳积分+3

5回答

提问者 吐槽者 2018-06-13 10:43:32

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

0 回复 有任何疑惑可以回复我~
  • Jimin #1
    CredentialMatcher 课程里这个类是涉及验证规则的,他决定了你如何使用登录提交的密码和数据库里密码进行验证。这里课程有介绍,不知道你是略过了还是学完忘记了。
    
    你这两三天提的问题,比绝大部分的人整门课程提的问题都多,我隐约感觉你在学习过程中缺少一些思考和记忆,光顾着赶进度了,建议你学习时注意一下这点。后面的代码量特别大,希望你抓不住视频里的细节。
    回复 有任何疑惑可以回复我~ 2018-06-13 11:19:34
  • 提问者 吐槽者 #2
    哎,我也不知道什么原因了,对比了下代码,没什么问题,就是登陆不了,刚刚看了除了我也有其他人跟我报的错误是一样的,不知道有没有解决。。。
    回复 有任何疑惑可以回复我~ 2018-06-13 11:22:33
  • 提问者 吐槽者 回复 Jimin #3
    因为我也是搜的报错信息,有提到加密的问题的,所以问一下
    回复 有任何疑惑可以回复我~ 2018-06-13 11:23:50
Jimin 2018-06-13 09:52:10

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

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 回复 有任何疑惑可以回复我~
  • 提问者 吐槽者 #1
    刚刚我都对照了这几个,跟我写的一样,而且我又复制了一遍,还是不行,是不是因为我数据库里面是123没有经过加密不行,但是我试了MD5的也是不行,而且视频上讲的暂时也没用到加密
    回复 有任何疑惑可以回复我~ 2018-06-13 10:02:44
  • Jimin 回复 提问者 吐槽者 #2
    catch里的异常,应该会有更详细的才对,打印出来看更容易些,可能最详细的被包裹里好几层,需要点几层进去才可以。你看看能否找出本质的异常说明,我现在感觉还是配置哪里的问题
    
    
    回复 有任何疑惑可以回复我~ 2018-06-13 10:07:59
提问者 吐槽者 2018-06-13 08:53:15

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

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 回复 有任何疑惑可以回复我~
提问者 吐槽者 2018-06-12 21:52:32

好的,谢谢老师

0 回复 有任何疑惑可以回复我~
Jimin 2018-06-12 21:28:19

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

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信