问答

springmvc用户登录验证这块,只有数据库中的一个数据能通过,其

作者:admin 2021-04-22 我要评论

问题描述 用springmvc写了个用户登录,只有数据库中一个数据能验证后跳转主页,其他都不行?? 问题出现的环境背景及自己尝试过哪些方法 我一直以为是我的mybati...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

问题描述

用springmvc写了个用户登录,只有数据库中一个数据能验证后跳转主页,其他都不行??

问题出现的环境背景及自己尝试过哪些方法

我一直以为是我的mybatis有问题,然后我用传统的jdbc写了一次,还是没有通过验证。。。。。
过程描述:
我输入 用户名:admin 密码:admin后,页面正常跳转,去往主页;
但是,我使用,用户名:a 密码:a后,页面没有跳转,还在登录界面;

这是我的数据库表格:
id userName userPassword dataTime
1 admin admin null
2 a a null
3 1 1 null

相关代码

粘贴代码文本(请勿用截图)
@RequestMapping("/checkUser")
public void check(User user, HttpServletRequest request, HttpServletResponse response, HttpSession session) throws IOException {
if(user != null){
//暂时不做三层架构,直接在Controller层表现
//1.加载配文件
InputStream resourceAsStream = null;
try {
resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
} catch (IOException e) {
e.printStackTrace();
}
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
InterUser mapper = sqlSession.getMapper(InterUser.class);
//dbusers从数据库查询的用户信息
List dbusers = mapper.searchAll();
//上方的代码是加载mybatis配置文件后,获取对象

System.out.println("用户输入的名称"+user.toString());
//进行遍历
for(User dbu : dbusers){
if(dbu.getUserName().equals(user.getUserName()) && dbu.getUserPassword().equals(user.getUserPassword())){
System.out.println("这里是实施四四数据库获取用户的名称"+user.toString());
String name=dbu.getUserName();//获取用户名称
session.setAttribute("sessionName",name);
try {
request.getRequestDispatcher("/data/searchByPage").forward(request,response);
} catch (ServletException e) {
e.printStackTrace();
}
return;
}else {
//验证错误,则返回登录页面
try {
request.getRequestDispatcher("/index.jsp").forward(request,response);
} catch (ServletException e) {
e.printStackTrace();
}
}
}
}
}

你期待的结果是什么?实际看到的错误信息又是什么?

我希望我的数据库里的其他数据也能通过验证;

我使用用户名用户名:a和密码:a后;控制台输出:
用户输入的名称User{id=null, userName='a', userPassword='a', dateTime=null}
这里是实施四四数据库获取用户的名称User{id=null, userName='a', userPassword='a', dateTime=null}

从这可以看出,已经判断成功了,为啥没有跳转呢??谢谢大家

###
boolean authed = false;
for(User dbu : dbusers)
{
    if(dbu.getUserName().equals(user.getUserName()) &&
            dbu.getUserPassword().equals(user.getUserPassword()))
    {
        System.out.println("这里是实施四四数据库获取用户的名称" + user.toString());
        String
        name = dbu.getUserName(); //获取用户名称
        session.setAttribute("sessionName", name);
        authed = true;
        break;
    }
}

if (authed)
{
    try
    {
        request.getRequestDispatcher("/data/searchByPage").forward(request, response);
    }
    catch (ServletException e)
    {
        e.printStackTrace();
    }
}
else
{
    //验证错误,则返回登录页面
    try
    {
        request.getRequestDispatcher("/index.jsp").forward(request, response);
    }
    catch (ServletException e)
    {
        e.printStackTrace();
    }
}

下次提交代码时请用这样的格式:
image.png

###

这首先可以看到数据库内数据是对的,那么是不是在你业务层哪里获取的数据不对呢,因为我看你是循环遍历比较账号密码
for循环找到第一个,然后你触发了else这步,这里request.getRequestDispatcher("/index.jsp").forward(request,response);触发
那么就会回到首页................

###

抓包看看结果响应

###

逻辑有问题嗷,首先不要用searchall进行全部查询在遍历,直接查询数据库有没有这个用户就行了,而且,当遍历在admin的时候,你的代码将会进入的else,不会向下遍历了,因为执行了forward,导致只判断了list中的第一个用户,即admin.

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 求助!Mysql workbench connections出

    求助!Mysql workbench connections出

  • c++ 的dll 转golang可以调用

    c++ 的dll 转golang可以调用

  • c++的 new int{10}  和 new int(10) 有

    c++的 new int{10} 和 new int(10) 有

  • Grafana MySQL为数据源时, 折线图无法

    Grafana MySQL为数据源时, 折线图无法

腾讯云代理商
海外云服务器