在进行登录的时候即使账号密码正确还是回到登录页面,不会调到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回答
-
你好,看了你发这些,这个异常的根本原因,你可以这样去检查一下:
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>你按照这几个方向对照检查一下看看。
012018-05-30 -
Jimin
2018-05-29
你好,在catch那里加个断点,看看出了什么异常,一旦走到这里就会回到之前的页面了,那个异常应该能看到根本的原因
042018-05-30
相似问题