用户在登录的时候,密码输入错误也能登录问题
今天在做用户登录那一块,遇到了密码随便输入还能登录问题,一直不知道问题出在哪里,开始用debug调试 发现从数据库中查询不到密码,只能查询出来用户名,所以在登录校验的时候只校验了用户名这一项
然后开始一步步检查错误 ,service层没有错,dao层的接口没问题 ,最终问题锁定到mapper文件里 。
发现mapper文件中的sql语句有问题。
登录控制层代码:
/**
* 点击登录执行的动作 TODO 第一次登录页面 没有解析${pageContext.request.contextPath} $%7B %7D
*/
@RequestMapping(value = "/loginValid", method = RequestMethod.POST)
public String loginValid() {
String username = super.getPara("userName").trim();
String password = super.getPara("password").trim();
// //验证验证码是否正确
// if(ToolUtil.getKaptchaOnOff()){
// String kaptcha = super.getPara("kaptcha").trim();
// String code = (String) getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
// if(ToolUtil.isEmpty(kaptcha) || !kaptcha.equals(code)){
// throw new InvalidKaptchaException();
// }
// }
// 取数据库验证用户名和密码,然后保存当前用户到session
User loginUser = userMapper.loginValid(username,password); //取不到用户密码,只能查询出来其他字段值
if (loginUser == null) {
throw new LoginValidException();
}
getSession().setAttribute("sessionFlag",true);
getSession().setAttribute("currentUser",loginUser);
return REDIRECT + "manage/index";
}
mapper文件里面的sql:
<select id="loginValid" resultType="user">
select
<include refid="Base_Column_List" />
from user
where state = 1
and phone = #{username} or account = #{username} or name= #{username}//开始以为是sql语句有问题 一直在纠结 and和 or 的问题 ,删除了 or name=#{username}
and password = #{password}
</select>
最后发现sql片段里面的字段没有password这一字段,但是这个作为条件 为了用户隐私,不能让查询到密码才设置的 后来发现没办法加了这一字段
<sql id="Base_Column_List">
id, password,account, name, birthday, sex, email, avatar,
phone, dept_id, level, state, create_time, version
</sql>
<select id="loginValid" resultType="user">
select
<include refid="Base_Column_List" />
from user
where state = 1
and phone = #{username} or account = #{username}
and password = #{password}
</select>
最终这一问题才接解决,总感觉有不妥的地方 ,不知道错在哪里 新人菜鸟一枚 希望能提出宝贵意见