用户在登录的时候,密码输入错误也能登录问题

今天在做用户登录那一块,遇到了密码随便输入还能登录问题,一直不知道问题出在哪里,开始用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>
最终这一问题才接解决,总感觉有不妥的地方 ,不知道错在哪里 新人菜鸟一枚 希望能提出宝贵意见




转载于:https://www.cnblogs.com/x9y9h/p/10136602.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值