jeecms框架单点登录功能的实现

   单点登录的功能实现主要原理:

         1: 在点击登录按钮的时候使用reponse.addCookie()方法向浏览器发送cookie;

         2: 在前段拦截器中的request.getCookie()在接收到设置的cookie,然后根据cookie的值设置用户;

   jeecms里在CookieUtils类中封装了cookie的3个基本方法 addCookie()添加、getCookie() 获取和cancleCookie()取消

/**
	 * 根据部署路径,将cookie保存发送到浏览器
	 * 
	 * @param request
	 * @param response
	 * @param name     cookie的名字
	 * @param value    cookie的值
	 * @param expiry   cookie生效的根路径
	 * @param domain   cookie生效的域名可以是ip地址
	 * @return
	 */
	public static Cookie addCookie(HttpServletRequest request,
			HttpServletResponse response, String name, String value,
			Integer expiry, String domain) {
		Cookie cookie = new Cookie(name, value);
		if (expiry != null) {
			cookie.setMaxAge(expiry);
		}
		if (StringUtils.isNotBlank(domain)) {
			cookie.setDomain(domain);
		}
		String ctx = request.getContextPath();
		cookie.setPath("/");
		response.addCookie(cookie);
		return cookie;
	}
	/**
	 * 获得cookie
	 * 
	 * @param request
	 *            HttpServletRequest
	 * @param name
	 *            cookie name
	 * @return if exist return cookie, else return null.
	 */
	public static Cookie getCookie(HttpServletRequest request, String name) {
		Assert.notNull(request);
		Cookie[] cookies = request.getCookies();
		if (cookies != null && cookies.length > 0) {
			for (Cookie c : cookies) {
				if (c.getName().equals(name)) {
					return c;
				}
			}
		}
		return null;
	}
/**
	 * 取消cookie
	 * 
	 * @param request
	 * @param response
	 * @param name
	 * @param domain
	 */
	public static void cancleCookie(HttpServletRequest request,
			HttpServletResponse response, String name, String domain) {
		Cookie cookie = new Cookie(name, "");
		cookie.setMaxAge(0);
		String ctx = request.getContextPath();
		cookie.setPath(StringUtils.isBlank(ctx) ? "/" : ctx);
		if (StringUtils.isNotBlank(domain)) {
			cookie.setDomain(domain);
		}
		response.addCookie(cookie);
	}
 功能实现主要是在CasLogin类中的submit()方法中加入使用addCookie()添加cookie;
 然后在FrontContextInterceptor类中的preHandle()方法中使用getCookie()获取cookie,通过cookie设置当前用户;

代码如下:


if (view != null) {
					
					Cookie cookie1 = CookieUtils.addCookie(request, response, "fabule_username", user.getId().toString(), 6000, "192.168.0.14");
					
					return view;
				} else {
					FrontUtils.frontData(request, model, site);
					return "redirect:login.jspx";
				}

		CmsUser user = null;
		
		Cookie userCookie = CookieUtils.getCookie(request, "fabule_username"); 
		if(user == null && userCookie != null){ 
		Integer userId =  Integer.parseInt(userCookie.getValue()); 
		if (userId != null) { 
		user = cmsUserMng.findById(userId); 
		} 
		} 
		if (user != null) { 
		CmsUtils.setUser(request, user); 
		} 
		
		return true;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值