问题描述
用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();
}
}
下次提交代码时请用这样的格式:
这首先可以看到数据库内数据是对的,那么是不是在你业务层哪里获取的数据不对呢,因为我看你是循环遍历比较账号密码
for循环找到第一个,然后你触发了else这步,这里request.getRequestDispatcher("/index.jsp").forward(request,response);触发
那么就会回到首页................
抓包看看结果响应
###逻辑有问题嗷,首先不要用searchall进行全部查询在遍历,直接查询数据库有没有这个用户就行了,而且,当遍历在admin的时候,你的代码将会进入的else,不会向下遍历了,因为执行了forward,导致只判断了list中的第一个用户,即admin.