开发者社区> 问答> 正文

Spring mvc 登陆验证:报错

1.前台js:

     var name = $("#name").val();
     var pwd = $("#pwd").val();
     $.ajax({
          url:"login?name="+name+"&pwd="+pwd+"",
          type:"post",
          success:function(result){
              if(result=="false"){
                 $("#error_msg").html("用户名或密码输入有误");
                $('#error_msg').show();
                return false;
               }
             if(result=="true"){
              document.loginform.submit();
             }
        }
    });

2.Controller:

@RequestMapping(value = "/login")
public String Verification(HttpServletRequest request,HttpServletResponse response) throws IOException {
       PrintWriter out = response.getWriter();
        String name = request.getParameter("name");
        String pwd = request.getParameter("pwd");
        User us = userService.findUserByname(name, pwd);
        if (us.getName() == null && us.getPassword() == null){
            out.print("false");
            return null;
        }else {
        session.setAttribute("us", us);
        out.print("true");
        return null;
        }
}

3. 后台service

public User findUserByname(String name, String pwd) {
    String sql = "select * from user where name=? and password = ?";
    User us = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class),                             name,pwd);
    return us;
}

注: 意思大家代码一看都明白了,就只是登陆ajax验证了。 问题在第3步,我输入的用户名密码错误,执行sql查不到数据就报错,可以怎样改一下,执行完第3步都返回到Controller,在第2步进行判断返回页面呢?(是不是我的方法有错呢,勿喷,学习Sping mvc ing.....)

展开
收起
kun坤 2020-06-06 14:46:30 551 0
1 条回答
写回答
取消 提交回答
  • 使用前判断一下:  User us = userService.findUserByname(name, pwd);

            if(us == null)

    {

        return"";

    }
             if (us.getName() == null && us.getPassword() == null){
                out.print("false");
                return null;
            }else {
            session.setAttribute("us", us);
            out.print("true");
            return null;
            }

    ######函数返回值设置为void  ,把return去掉,直接out.print就行了  你试试,希望对你有帮助######

    引用来自“yangzhiyong”的答案

    使用前判断一下:  User us = userService.findUserByname(name, pwd);

            if(us == null)

    {

        return"";

    }
             if (us.getName() == null && us.getPassword() == null){
                out.print("false");
                return null;
            }else {
            session.setAttribute("us", us);
            out.print("true");
            return null;
            }

    那个,问题在第3步了,当输入错误的用户名或密码,执行玩sql就直接报错

     User us = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), name,pwd);

    报错:

    org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
    at org.springframework.dao.support.DataAccessUtils.requiredSingleResult(DataAccessUtils.java:71)
    at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:734)
    at net.hsf.dao.imp.UserDaoImpl.findUserByname(UserDaoImpl.java:77)
    at net.hsf.service.UserService.findUserByname(UserService.java:69)
    at net.hsf.controller.HelloController.Verification(HelloController.java:98)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)

    返回不到第2步,所以....... 


    ######

    引用来自“白与黑”的答案

    函数返回值设置为void  ,把return去掉,直接out.print就行了  你试试,希望对你有帮助
    3q,不行那,看回复, 是不是我的jdbc方法掉错了,按上述的方法执行必须返回一个user,返回null的话就报错? 
    ######

    public int findUserByname(final String name, final String pwd) {

        int count = 0;

        String sql = "select * from user where name=? and password = ?";

        Object[] args ={name,pwd};

        count = jdbcTemplate.queryForInt(sql,args);

        return count;

    }

    action层根据返回的count值判断是否正确

    ######

    如果想友好提示登录就不是这么个逻辑了

    Countroller伪码:

    登录验证(){
    User user=service.queryByEmail(email);
    if(user==null){
    账号不存在
    }
    if(user.getStatus()==冻结){
    账号被冻结了
    }
    if(user.getPwd()!=pwd){
    密码错误
    }

    ######

    引用来自“sc19860709”的答案

    public int findUserByname(final String name, final String pwd) {

        int count = 0;

        String sql = "select * from user where name=? and password = ?";

        Object[] args ={name,pwd};

        count = jdbcTemplate.queryForInt(sql,args);

        return count;

    }

    action层根据返回的count值判断是否正确

    3q 换位思考 效果良好。
    ######

    引用来自“風一樣的男子”的答案

    如果想友好提示登录就不是这么个逻辑了

    Countroller伪码:

    登录验证(){
    User user=service.queryByEmail(email);
    if(user==null){
    账号不存在
    }
    if(user.getStatus()==冻结){
    账号被冻结了
    }
    if(user.getPwd()!=pwd){
    密码错误
    }

    嗯 谢谢你的提示。
    ######找到错误了吗######
    $.ajax({
    	url:"login?name="+name+"&pwd="+pwd+"",
    	type:"post",
    	success:function(result){
    		if(result == "false"){
    			$("#error_msg").html("用户名或密码输入有误");
    			$('#error_msg').show();
    			return false;
    		}
    		
    		if(result=="true"){
    			document.loginform.submit();
    		}
    	}
    });
    校验成功后,还会再一次提交form。
    if(result=="true"){
    	document.loginform.submit();
    }
    

     
    
    2020-06-06 14:46:36
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载

相关实验场景

更多