基于Cookie和session,实现单点登录

公司目前有两个项目,需求实现单线,为了尽快完成进度,基于cookie实现了单线,在此记录一下,以免忘记。


两个项目都是基于SSM 框架,登录使用的是session,为了尽量少的改动两个项目,为两个项目添加拦截器。并在登录、注册、退出的功能做了少量的改动。

1、拦截器实现

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		
		String property = PropertiesUtil.getProperty("isSSO");
		if(!"1".equals(property)){
			return true;
		}
		
		MbMember attribute = (MbMember)request.getSession().getAttribute("sessionMember");
		Cookie[] cookies = request.getCookies();
		if(cookies == null || cookies.length < 1)return true;
		for (Cookie cookie : cookies) {
			String cookieName = cookie.getName();
			if("USER_SSO".equals(cookieName)){
				String value = cookie.getValue();
					MbMember mbmember = mbmember = memberService.selectByPW(pwd);	
					request.getSession().setAttribute("sessionMember", mbmember);
					}
				}
			}
			if("SSO_OUT".equals(cookieName)){
				if(attribute != null){
					request.getSession().setAttribute("sessionMember", null);
				}
			}
		}
		return true;
	}

登录和注册只修改了

//SSO 开启状态
		String property = PropertiesUtil.getProperty("isSSO");
		if("1".equals(property)){
			//SSO种Cookie
			String  cookieValue = selectByPhone.getPassword() + selectByPhone.getPwdAttach();
			Cookie cookie = new Cookie("USER_SSO", cookieValue);
			cookie.setMaxAge(60*30);
			cookie.setPath("/");
			cookie.setDomain(".luosijinrong.com");
			
			Cookie clearCookie = new Cookie("SSO_OUT", "");
			clearCookie.setMaxAge(0);
			clearCookie.setPath("/");
			clearCookie.setDomain(".XXXXX.com");
			
			response.addCookie(clearCookie);
			response.addCookie(cookie);
		}

退出:

String property = PropertiesUtil.getProperty("isSSO");
		if("1".equals(property)){
			//退出登录时,种清除cookie,提供电商系统的依据
			Cookie addCookie = new Cookie("SSO_OUT", "XZDSMYSMSB");
			addCookie.setPath("/");
			addCookie.setDomain(".XXXXX.com");
			
			Cookie clearCookie = new Cookie("USER_SSO", "");
			clearCookie.setMaxAge(0);
			clearCookie.setPath("/");
			clearCookie.setDomain(".XXXXX.com");
			
			response.addCookie(addCookie);
			response.addCookie(clearCookie);
		}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值