在进行登录的时候即使账号密码正确还是回到登录页面,不会调到index.jsp这个页面

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

慕斯5332939

2018-05-29

@RequestMapping("/loginUser")

    public String loginUser(@RequestParam("username") String username,

                            @RequestParam("password") String password,

                            HttpSession session) {

        UsernamePasswordToken token = new UsernamePasswordToken(username, password);

        Subject subject = SecurityUtils.getSubject();

        try {

            subject.login(token);

            User user = (User) subject.getPrincipal();

            session.setAttribute("user", user);

            return "index";

        } catch (Exception e) {

            return "login";

        }

    }

执行完    subject.login(token);就调到了catch后面的异常

写回答

2回答

Jimin

2018-05-30

你好,看了你发这些,这个异常的根本原因,你可以这样去检查一下:

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>

你按照这几个方向对照检查一下看看。

0
1
慕斯5332939
非常感谢!是在application.properties 文件中mybatis.mapper-locations=mappers/*.xml 中locations中把s漏掉了
2018-05-30
共1条回复

Jimin

2018-05-29

你好,在catch那里加个断点,看看出了什么异常,一旦走到这里就会回到之前的页面了,那个异常应该能看到根本的原因

0
4
慕斯5332939
还是无法跳转,求指教 异常: org.apache.shiro.authc.AuthenticationException: Authentication failed for token submission [org.apache.shiro.authc.UsernamePasswordToken - admin, rememberMe=false]. Possible unexpected error? (Typical or expected login exceptions should extend from AuthenticationException).
2018-05-30
共4条回复

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

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

2264 学习 · 1347 问题

查看课程