0003.用户登录和注销

用户登录流程:用户输入-->页面校验数据后提交表单-->判断是否已经登录-->判断输入是否合法-->查询数据库是否有对应用户-->返回登录结果


先对页面表单提交地址和方式进行调整,输入项添加required必填项属性。
<form id="loginForm" action="${pageContext.request.contextPath }/UserAction_login.action" method="post">
						 <h5>User Name:</h5>	
						 <input name="user.username" type="text"  required='true' >
						 <h5>Password:</h5>
						 <input name="user.password" type="password" required='true' >					
						 <input type="submit" value="Login">
					 </form>
页面引入struts标签库,添加actionerror标签接收服务器返回的信息,作为给用户的登录失败提示:
 <!-- 登陆失败提示信息 -->
					 <div style="color:red"> <s:actionerror/>  </div>

因为要使用actionError,在UserAction继承ActionSupport类添加login方法,添加login方法:
	/**
	 * 用户登录
	 */
	public String login(){
		//System.out.println(user.getUsername()+","+user.getPassword());
		//判断用户是否已经登陆
		HttpSession session = ServletActionContext.getRequest().getSession();  
		if(session.getAttribute("loginUser") != null){
			//已经登陆,回到主页
			return "success";
		}
		
		//判断用户输入的用户名是不是空白字符串
		if(StringUtils.isNotBlank(user.getUsername())){
			//非空白用户名,调用service校验
			User db_user = userService.login(user);
			if(db_user != null){
				//登陆成功,设置登录信息
				session.setAttribute("loginUser", db_user);
				//返回主页
				return "success";
			}else{
				//用户名或密码不正确,设置错误信息
				this.addActionError("用户名或密码错误");
				//返回登陆页面
				return "login";
			}
		}else{
			//输入的是空白用户名,设置错误信息
			this.addActionError("用户名或密码错误");
			//返回登陆页面
			return "login";
		}

UserService的login方法实现,将用户输入明文密码用MD5加密,然后调用dao方法查询用户
	/*
	 * 用户登录
	 */
	public User login(User user) {
		//MD5加密密码
		String md5_password = MD5Utils.getMd5(user.getPassword());
		user.setPassword(md5_password);
		//返回dao查询到的结果
		return userDao.login(user);
	}

在dao中将用户名和用户密码作为组合查询条件进行查询,这里用的hql查询:
	/**
	 * 用户登录
	 * 根据用户名+密码查询用户
	 */
	public User login(User user) {
		//hql查询语句
		String hql = "FROM User u WHERE u.username =? AND u.password =?";
		//调用模板方法查找
		List<User> list = (List<User>) this.getHibernateTemplate().find(hql, user.getUsername(), user.getPassword());
		//判断查询结果
		if(list.isEmpty()){
			//空集,没找到用户
			return null;
		}
		//非空,返回User对象
		return list.get(0);
	}

为了直观地看到是否登录,在前端页面加个标签显示当前用户,顺便加个退出标签:
<li><a href="" >${loginUser.username }</a></li>
<li><a href="${pageContext.request.contextPath }/UserAction_logout.action" >logout</a></li>
退出登录直接销毁session然后返回登录页面:
	/**
	 * 退出登录
	 */
	public String logout(){
		//销毁session
		ServletActionContext.getRequest().getSession().invalidate();
		//返回登陆页面
		return "login";
	}
登录+退出登录:

login_test

登陆失败:
login_fail_test


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值