前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用户管理模块之用户登录

用户管理模块之用户登录

作者头像
爱撒谎的男孩
发布2018-05-25 16:28:29
1.8K0
发布2018-05-25 16:28:29
举报
文章被收录于专栏:码猿技术专栏码猿技术专栏

用户管理模块之用户登录

开发顺序

  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接口中定义
代码语言:javascript
复制
/**
 * 实现登录的业务
 * @param userName  用户名
 * @param passWord  密码
 * @return  User对象
 * @throws UserNotFoundException  用户不存在的异常
 * @throws PassWordNotMatchException  密码不匹配的异常
 */
User login(String userName,String passWord) throws UserNotFoundException, PassWordNotMatchException;
  • UserServiceImpl实现类实现方法
代码语言:javascript
复制
/**
	 * 登录方法
	 * 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中测试
代码语言:javascript
复制
@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

实现

  • 显示用户登录页面
代码语言:javascript
复制
/**
 * 显示登录视图 login.jsp
 * @return
 */
@RequestMapping("/showLogin.do")
public String showLogin() {
	return "login"; // 直接返回一个视图名称即可
}
  • 处理异步请求登录的方法
代码语言:javascript
复制
/**
 * 点击登录按钮处理异步请求的方法
 * @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页面中添加异步请求

代码语言:javascript
复制
//点击登录按钮的方法
    $('#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 });
        }
    };

总结

  1. 实现登录的时候,不可以使用用户名密码直接查询人数,因为sql是不区分大小写的,但是我们的密码是区分大小写的,比如select * from t_user where username=? and password=?,这个是不可以直接使用的,应该是使用用户名查询返回User对象,然后在比较用户输入的密码和对象中的密码是否相同:password.equals(user.getPassWord())
  2. 在需要修改前端页面的时候,不要大幅度的修改其中的css文件,可以使用内嵌式的样式修改即可
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用户管理模块之用户登录
    • 开发顺序
      • 在cn.tedu.store.mapper中新建UserMapper.java接口
        • 功能
      • 在cn.tedu.store.service创建IUserService接口和实现类UserServiceImpl
        • 功能
        • 分析
        • 实现
      • 在cn.tedu.store.controller中新建UserController
        • 功能
        • 实现
      • 在login.jsp页面中添加异步请求
        • 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档