java鬼混笔记:java同父域的单点登录

公司之前有个项目是用了单点登录的,是同父域情况下操作的,刚好之前自己也学习过,对比了一下,差不多的原理,今天就笔记一下简单的一个同父域的单点登录功能。

首先在win10的hosts文件里添加下面的内容

hosts:

#
127.0.0.1	www.mail.ywj.cn
#
127.0.0.1	www.zone.ywj.cn

看得出是同父域:.ywj.cn;

操作的流程是:1、分别打开www.mail.ywj.cn,www.zone.ywj.cn,显示的都是要登录的页面,2、登录其中的一个,比如登录www.mail.ywj.cn,登录成功后,去刷新www.zone.ywj.cn

发现登录成功了。OK,流程就这个么样子。


代码流程:先加个Filter,根据session判断用户没有登录过,就查找指定的cookie,如果cookie不存在,跳到登录页面,如果指定的cookie存在,就通过cookie值找到相关的用户信息,然后就把用户信息放到session中,登录成功。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		
	HttpServletRequest r = (HttpServletRequest) request;
	
	if(!r.getRequestURL().toString().endsWith("/out.do") && r.getRequestURL().toString().endsWith(".do")) {// 对.do请求做出处理,但是要去掉对退出功能out.do的处理
		if(r.getSession().getAttribute("userName") == null) {// 1、当用户没有登录时,查找cookie
			Cookie[] cookies = r.getCookies();
			if(cookies != null && cookies.length > 0){
				for(Cookie c : cookies) {
					if("ywjCookie".equals(c.getName())) {// 2、找到指定的cookie(name=ywjCookie),找到后相关的cookie后就通过这个cookie查询相关的用户信息,此处省去相关查询代码
						r.getSession().setAttribute("userName", "ywj");// 3、查询用户信息完毕后,把用户信息放在session中,省去这部分代码
						break;
					}
				}
			}
		}
	}
	chain.doFilter(request, response);
}

如果找不到相关的cookie,就正常登录,登录后,把用户信息放在session中,同时生成一个cookie放在浏览器中,设置域的范围是父域

/**
* 登录
*/
@RequestMapping("/login.do")
public String login(HttpServletRequest request, HttpServletResponse response, String userName) {
	
	// 省去各种账号密码角色权限判断
	request.getSession().setAttribute("userName", userName);// 1、把用户的信息放在session中
	Cookie cookie = new Cookie("ywjCookie", userName+System.currentTimeMillis());// 添加cookie,为别的系统单点登录做准备
	cookie.setDomain("ywj.cn");// 设置成父域,之前的老版是要在ywj前加个.,也就是".ywj.cn"
	cookie.setPath("/");
	response.addCookie(cookie);
	return "index";
}

/**
* 退出
*/
@RequestMapping("/out.do")
public String out(HttpServletRequest request, HttpServletResponse response) {

	request.getSession().invalidate();
	// 删除cookie
	Cookie cookie = new Cookie("ywjCookie", "");
	cookie.setMaxAge(0);
	cookie.setDomain("ywj.cn");
	cookie.setPath("/");
	response.addCookie(cookie);
	return "redirect:/index.do";
}

ok,就这个样子。。。下面登录的jsp页面

<body>
<c:if test="${empty userName}">
<form action="login.do">
	<input type="text" value="ywj" name="userName"/>
	<input type="submit" value="submit"/>
</form>
</c:if>
<c:if test="${!empty userName}">
hello,${userName}
<a href="out.do">log out</a>
</c:if>
</body>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值