10
回答
Spring mvc 登陆验证
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

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.....)

举报
zerohh
发帖于5年前 10回/6K+阅
共有10个答案 最后回答: 4年前

使用前判断一下:  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;
        }

引用来自“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();
}

 

        
顶部