小东Freeman + 关注

签名:我们爱我们的倒霉工作,也爱这千疮百孔的世界。

Springmvc拦截器+Cookie实现网站自动登录功能

发表于 10个月前   2881次查看    8评论  12 赞

网站自动登录功能留着一直没做,倒不是什么技术问题,可能以前觉得没多大用,但是最近突然觉的太有必要了,这样对用户是十分友好的设计,所以今天就利用Springmvc拦截器+cookie实现了网站自动登录的功能

需求分析:用户登录一次后,在未来的一段时间是不用再进行登录操作的,除非用户点击退出登录。


开发过程:


一、配置springmvc拦截器:在springmvc.xml中找到拦截器配置,添加一个新的拦截器

    <!--拦截器 -->
	<mvc:interceptors>
		<!-- 多个拦截器,顺序执行 -->
		<mvc:interceptor>
			<!-- 进行登录拦截的拦截器-->
			<mvc:mapping path="/**" />
			<bean class="com.interceptor.LoginInterceptor"></bean>
		</mvc:interceptor>
		<mvc:interceptor>
			<!-- 进行cookie登录的拦截器 -->
			<mvc:mapping path="/**" />
			<bean class="com.interceptor.CookieInterceptor"></bean>
		</mvc:interceptor>
		<mvc:interceptor>
			<!-- 进行ip检测的拦截器 -->
			<mvc:mapping path="/**" />
			<bean class="com.interceptor.IPInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>

这里有三个拦截器,他们都是顺序执行的,不太明白原理的可以百度一下。


二、首次登录时操作cookie

//登录成功设置cookie
			Cookie userCookie=new Cookie("username",username);
			userCookie.setMaxAge(4*7*24*60*60);
			//设置cookie存取路径
			userCookie.setPath("/");
			//将Cookie加到response中
			response.addCookie(userCookie);

这里我只存了username,因为username是我数据库的唯一标识,然后cookie是不安全的,所以不要在cookie里存放过多的信息。


三、拦截器操作:因为用户进入网站不一定会进入那个页面,所以我们在拦截器里操作是最恰当的,因为所有的请求都需要经过拦截器里的prehandle方法里,所以我们这样写

@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
			Object arg2) throws Exception {
		//判断session中是否有信息
		HttpSession session=request.getSession();
		String username=(String) session.getAttribute("username");
		if(username!=null){
			//有就通过
			return true;
		}else{
			//没有session就获取cookie进行判断
			Cookie[] cookies=request.getCookies();
			if(cookies!=null){
			//有cookie就通过cookie获取用户信息
			//遍历cookies
			for(Cookie cookie : cookies){
				if(cookie.getName().equals("username")){
					String userCookie=cookie.getValue();
					    //当cookie中有username才执行
						//获取用户数据
						UserCustom user=new UserCustom();
						user.setUsername(userCookie);
						user=userService.findUserInfByUsername(user);
						//登录成功设置session
						session.setAttribute("userInf", user);
						return true;						
				}
			}
			
			}		
		}
		return true;	
	}

原理:先判断session中是否已经有用户信息,也就是用户已经登录,这样我们就不用再取cookie了,如果session里没有值,我们进行下一步判断浏览器中是否存在本网站的cookie,如果不为空我们就看看在所有cookie是否有我们存的username,如果有就连接数据库查找用户信息后存到session中,如果没有就正常通过就OK了

四、用户退出:用户自主选择退出后,我们需要删除存在浏览器里的cookie,以防下次自动登录

//销毁cookie
			Cookie userCookie=new Cookie("username",null);
			userCookie.setMaxAge(0);
			//设置cookie存取路径
			userCookie.setPath("/");
			response.addCookie(userCookie);
			//销毁session
			request.getSession().invalidate();


这样就实现了网站自动登录的功能,有不懂得在下方评论

12人已赞


本文由Fun言网 – 小东Freeman创作,转载请务必附上本文链接和出处,欢迎参与我们的付费投稿计划


你还没有登录,请先 登录注册!
文章评论8