登录+Session+Cookie+以及自定义异常类的简单使用

1、Session(存储用户登录后,存储登录对象)

1.1 将登录信息存储到session

//登录(也可以根据HttpServletRequest来获取session对象)
@RequestMapping(value="/login",method=RequestMethod.POST)
@ResponseBody
public String login(HttpSession session){

	//将登录信息保存到session里面  (就这一句就行)
	//参数1:session的唯一id   参数2:需要存储到session里的内容(一般存储登录成功后的user信息)
	session.setAttribute("USER_IN_SESSION", user);
	
}

1.2 前台获取session

如果前台需要展示谁进行的登录,那么可以这样取到名字


<!-- 直接使用后台传来的USER_IN_SESSION取里面的值(获取名字) -->
<span>${USER_IN_SESSION.name}</span>

1.3 退出登录,清空存储到服务器里面的session对象

//登出
@RequestMapping(value="/logout",method=RequestMethod.GET)
public String logout(HttpSession session){
	
	//移除session(清空服务器对象)
	session.invalidate();
	
	//返回到登录界面 login.jsp  这里配置了视图解析器
	return "login";
}

2、Cookie存储用户名和密码

  • ① 登录的时候点击记住密码,下次关闭浏览器后再回来登录能将密码和账号直接 回显 到输入框里面。
  • ② 就是类属于PC端QQ登录,点击记住后下次在来不用再输入账号和密码
  • ③ 注意:大致就是将登录的账号和密码值存到cookie里面,然后设置七天过期,他会将这个用户和密码存到磁盘里面,实现以上操做。

在这里插入图片描述

2.1 后台代码存储cookie信息

/*
  注意:
  	1.这里返回的Ajax是自己封装的类,里面包含 是否成功 和失败后的失败信息存储类型(String)。
	2.Integer remember:这里的参数是接收前台的标签记住密码的值(例:<input type="checkbox" name="remember" value="1">记住我)
	这里判读他是否点击了 记住我 这个标签,如果点击了才将登录信息存储到cookie里
*/
//用户点击登录后的判断用户名和密码的操做
@RequestMapping(value="/login",method=RequestMethod.POST)
@ResponseBody
public Ajax submit(String username,String password,Integer remember,HttpSession session,HttpServletResponse resp,HttpServletRequest req){
	try {
		//1.根据用户名和密码,查询出登录数据(在service层里判断,如果没有就抛异常了)
		User user =service.login(username,password);
		//2.将登录信息保存到session里面(这是上面将登录信息存储到session里的操做)
		session.setAttribute("USER_IN_SESSION", user);
		
		// * 3. 只有在上面登录成功并且选中了的情况下才进行记住密码的操做
		if(remember!=null){
			//3.1 将用户名和密码存到cookie里面
			Cookie c1 = new Cookie("USERNAME",username);
			Cookie c2 = new Cookie("PASSWORD",password);
			//3.2 设置生命周期(7天有效)
			c1.setMaxAge(7*24*60*60);
			c2.setMaxAge(7*24*60*60);
			//3.3 设置作用域(在根路径下有效)
			c1.setPath("/");
			c2.setPath("/");
			
			//3.4 响应到页面,上面的操做只是在内存里面,浏览器里面还没有,所以需要响应到浏览器的cookie里
			resp.addCookie(c1);
			resp.addCookie(c2);
		}else{
			//* 4.登录成功但是没点记住密码的操做(点击登录,但是没有勾选记住密码的操做,所以就要删除以前记住密码的cookie,下一次就需要重新输入用户名和密码)
			
			//4.1 获取到请求头里面的所有cookie
			Cookie[] cookies = req.getCookies();
			for (Cookie c : cookies) {
				
				//4.2 获取到username和password的cookie
				if("USERNAME".equals(c.getName()) || "PASSWORD".equals(c.getName())){
					
					// * 4.3 删除cookie   
					c.setMaxAge(0); //只要为0就表示立即删除
					c.setPath("/"); //这情况作用于所有根路径
					
					//4.4 上面操做只是在内存里,需要响应到页面
					resp.addCookie(c);
				}
			}
		}
		return new Ajax();
	} catch (Exception e) {
		e.printStackTrace();
		return new Ajax(false,e.getMessage());
	}
}

2.2 前台代码获取后台传来的cookie实现回显的操做

这个代码和提交登录一个界面,刚开始进去的时候他会判断有没有cookie(第一次没有,如果操做过后就有了)

//1、获取到后台存储的所有cookie  username=root; password=123
var cookies =  document.cookie;
//2、只有cookies存在的情况下才进行回显操做  (不等于-1表示存在,判断这个字符串cookie里面有没有包含登录信息username)
if(cookies.indexOf("username")!=-1){
	//3、截取cookie,得到的是一个数组
  		var cookieArr = cookies.split(";");
  		
  		var username = null;
  		var password =null;
  	//4.循环这个数组,得到用户信息的cookie(就是将用户名和密码进行回显)	
	for(var i in cookieArr){
		if(cookieArr[i].indexOf("username")!=-1){
			//截取到用户名
			username = cookieArr[i].substring(cookieArr[i].lastIndexOf("=")+1);
		}	
		if(cookieArr[i].indexOf("password")!=-1){
			//截取到密码
			password = cookieArr[i].substring(cookieArr[i].lastIndexOf("=")+1);
		}
	}
  		//截取到用户名
  		//var password = passwordStr.substring(passwordStr.lastIndexOf("=")+1);
  		
  		//5.回显(将cookie里的用户名和密码回显到输入框里面)
  		$("input[name='username']").val(username);
  		$("input[name='password']").val(password);
  		//6.回显记住密码的 √ 
  		$("input[name='remember']").prop("checked",true);
}

---------------------------- 登录 end---------------------------

3、自定义异常类

/**
 *  自定义异常类 继承Exception异常(使用的时候直接new来使用,将错误信息存储到有参构造里面。原本的异常太大了,所以需要自定义异常)
 */
public class AuthenticationException extends Exception{

	public AuthenticationException() {
		super();
	}

	public AuthenticationException(String message) {
		super(message);
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值