转载

用户管理模块之用户登录

  1. 持久层
  2. 业务层
  3. 控制层
  4. 页面

cn.tedu.store.mapper 中新建 UserMapper.java 接口

  • 由于在用户管理模块之用户注册已经创建了,所以不用新建了

功能

  1. 验证用户名是否存在,其中返回的是用户对象,这个在前面的注册已经定义过了,是 User selectUserByUserName(String userName)

cn.tedu.store.service 创建 IUserService 接口和实现类 UserServiceImpl

  • 由于在用户管理模块之用户注册已经创建了,所以不用新建了

功能

  1. 实现用户登录的业务,传入的参数是 用户名密码

分析

  1. 用户登录输入的是 用户名密码 ,登录不成功无非是是两种可能
    1. 用户名不存在,抛出异常提示
    2. 密码不匹配,抛出异常提示
  2. 用户登录 User login(String userName,String passWord )`
    1. 通过 selectUserByUserName 返回user对象
    2. 判断 user 是否为 null
    3. 如果 user=null ,抛出 UserNotFoundException 异常
    4. 如果 user!=null ,那么验证其中的密码是否正确
    5. 如果密码不匹配,抛出 PassWordNotMatchException 异常
    6. 如果密码匹配,那么返回 user 对象
  3. 抛出异常,当然需要有自己的异常类,在 cn.tedu.store.service.ex 中新建两个异常类
    1. 用户名不存在的异常 UserNotFoundException ,继承 Exception ,重写父类的 构造方法
    2. 密码不匹配的异常 PasswordNotMatchException ,继承 Exception ,重写父类的 构造方法

实现

  • IUserService 接口中定义
/**
 * 实现登录的业务
 * @param userName  用户名
 * @param passWord  密码
 * @return  User对象
 * @throws UserNotFoundException  用户不存在的异常
 * @throws PassWordNotMatchException  密码不匹配的异常
 */
Userlogin(String userName,String passWord)throws UserNotFoundException, PassWordNotMatchException;
  • UserServiceImpl 实现类实现方法
/**
	 * 登录方法
	 * 1. 通过selectUserByUserName返回user对象
	 * 2.判断user是否为null
	 * 3.如果user=null,抛出UserNotFoundException异常
	 * 4.如果user!=null,那么验证其中的密码是否正确
	 * 5.如果密码不匹配,抛出PassWordNotMatchException异常
	 * 6. 如果密码匹配,那么返回user对象
	 * @throws UserNotFoundException 
	 * @throws PassWordNotMatchException 
	 */
	public User login(String userName, String passWord)throws UserNotFoundException, PassWordNotMatchException {
		
		User user=userMapper.selectUserByUserName(userName);  //根据用户名查询,返回user对象
		if (user==null) {   //user为null,表示用户名不存在
			throw new UserNotFoundException("用户名不存在");
		}else {  //如果用户名存在,验证密码
			if (passWord.equals(user.getPassword())) {  //如果密码匹配
				return user;   //返回user对象即可
			}else {   //如果密码不相同,那么直接抛出密码不匹配的异常即可
				throw new PassWordNotMatchException("密码不匹配");
			}
		}
	}
  • TestUser 中测试
@Test
public void testLoginService(){
	// 加载Spring的配置文件,测试的业务层,因此需要spring-dao.xml和spring-service.xml配置文件
	AbstractApplicationContext ac = new ClassPathXmlApplicationContext(
			"spring-dao.xml", "spring-service.xml");

	IUserService userService = ac.getBean("userServiceImpl",
			IUserService.class);

	String username="陈加兵";
	String password="123456";
	try {
		User user=userService.login(username, password);
		System.out.println("用户登录成功");
	} catch (UserNotFoundException e) {
		System.out.println(e.getMessage());
	} catch (PassWordNotMatchException e) {
		System.out.println(e.getMessage());
	}
}

cn.tedu.store.controller 中新建 UserController

  • 由于之前新建过了,不需要在新建了

功能

  1. 显示登录页面
    1. /user/showLogin.do
  2. 处理登录的请求
    1. /user/login.do
    2. 请求参数: userNamepassword
    3. 请求方式 POST
    4. 响应方式: ResposneBody

实现

  • 显示用户登录页面
/**
 * 显示登录视图 login.jsp
 * @return
 */
@RequestMapping("/showLogin.do")
public String showLogin(){
	return "login"; // 直接返回一个视图名称即可
}
  • 处理异步请求登录的方法
/**
 * 点击登录按钮处理异步请求的方法
 * @param username  用户名
 * @param password  密码
 * @param session  session域
 * @return  返回处理结果
 */
@RequestMapping("/login.do")
@ResponseBody
public ResponseResult<Void> login(String username,String password,HttpSession session){
	ResponseResult<Void> result=new ResponseResult<Void>();  //新建返回结果对象
	try {
		User user=userservice.login(username, password);  //调用service的login方法登录
		result.setState(1);   //设置响应状态码
		result.setMessage("登录成功");  //设置提示信息
		session.setAttribute("user",user);  //将user对象存放在session中
	} catch (UserNotFoundException e) { //用户名不存在的异常
		result.setState(0);   //设置响应状态码
		result.setMessage(e.getMessage());  //设置提示信息
	} catch (PassWordNotMatchException e) {   //密码不匹配的异常
		result.setState(0);   //设置响应状态码
		result.setMessage(e.getMessage());  //设置提示信息
	}
	return result;   //返回结果
}

login.jsp 页面中添加异步请求

//点击登录按钮的方法
    $('#bt-login').click(function(){
        var username=$("#username").val();  //用户名
        var password=$("#password").val();  //密码
        var d={"username":username,"password":password};  //封装请求数据
        var url="<%=request.getContextPath()%>/user/login.do";  //请求地址
        //异步提交请求,进行验证
		$.post(url,d,function(data,status,xhr){
			//如果响应成功
			if(status=="success"){
				$("#showResult").text(data.message);  //显示提示信息
				//如果登录成功
				if(data.state==1){
					Save();  //调用save方法保存用户名和密码,保证后面自动登录
				   //跳转到首页index.jsp
                    window.location.href="<%=request.getContextPath()%>/main/showIndex.do";
					
				}else{  //登录没有成功
					$("#showResult").css("color","red");  //设置提示信息的文本颜色为红色
				}
			}
		});        
    });


 $(document).ready(function (){
        if ($.cookie("rmbUser") == "true") {
            $("#ck_rmbUser").attr("checked", true);
            $("#username").val($.cookie("username"));
            $("#password").val($.cookie("password"));
        }
    });

    //记住用户名密码,保存在cookie中
    function Save(){
        if ($("#ck_rmbUser").prop("checked")) {
            var str_username = $("#username").val();
            var str_password = $("#password").val();
            $.cookie("rmbUser", "true", { expires: 7 }); //存储一个带7天期限的cookie
            $.cookie("username", str_username, { expires: 7 });
            $.cookie("password", str_password, { expires: 7 });
        }
        else {
            $.cookie("rmbUser", "false", { expire: -1 });
            $.cookie("username", "", { expires: -1 });
            $.cookie("password", "", { expires: -1 });
        }
    };
原文  https://chenjiabing666.github.io/2018/05/21/用户管理模块之用户登录/
正文到此结束
Loading...