`
cevin15
  • 浏览: 27825 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用cookie实现简单的单点登录功能

阅读更多
看到篇博文,是关于单点登录的。
引用
编写你自己的单点登录(SSO)服务:http://blog.csdn.net/javachannel/article/details/752437

根据这个博文,自己动手尝试了一下这种单点登录解决方案,当然,这个解决方案有个缺陷,就是有个前提,应用必须能够共享cookie。
记下思路,作为备忘。
1、关于cookie的设置。cookie使用了setDomain和setPath,这样才能保证这个cookie能被所有应用共享。
引用
1.可在同一应用服务器内共享方法:设置cookie.setPath("/");
2.跨域共享cookie的方法:设置cookie.setDomain(".jszx.com"),这个参数必须以“.”开始。 ;

2、用cookie来保存用户已登录的状态。在注销用户时,把该cookie设置过期,当然,也要使用setDomain和setPath。
3、使用了三个web project来做练习,一个作为登录验证系统,另外两个应用系统,代码基本相同。应用系统配置filter来过滤访问请求。

过滤器代码
public class UserFilter implements Filter {
	private static String loginUrl = "";

	public void destroy() {
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse resp = (HttpServletResponse) response;
		if (isCookieLogined(req)) {
			chain.doFilter(request, response);
		} else {
			String fromUrl = req.getRequestURL().toString();
			resp.sendRedirect(loginUrl + "?fromUrl=" + fromUrl);
		}
	}

	public void init(FilterConfig filterConfig) throws ServletException {
		loginUrl = filterConfig.getServletContext().getInitParameter("loginUrl");
	}

	private boolean isCookieLogined(HttpServletRequest req) {
		Cookie[] cookies = req.getCookies();
		if(cookies!=null){
			for (Cookie cookie : cookies) {
				if (cookie.getName().equals("user")&&cookie.getValue()!=null) {
					//TODO:此处应该调用auth的cookie验证方法
					return true;
				}
			}
		}
		return false;
	}
}

登录验证系统的登录代码
public class LoginServlet extends HttpServlet {

	private static final long serialVersionUID = -8212504322196762878L;
	private static ConcurrentMap<String, String> userMap = new ConcurrentHashMap<String, String>();

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String fromUrl = request.getParameter("fromUrl");
		request.setAttribute("fromUrl", fromUrl);
		
		request.getRequestDispatcher("index.jsp").forward(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String user = request.getParameter("user");
		if(this.isRegister(user)){
			this.saveCookie(user, response);
			String fromUrl = request.getParameter("fromUrl");
			response.sendRedirect(fromUrl);
		}
	}
	
	@Override
	/**
	 * 初始化数据
	 */
	public void init() throws ServletException {
		userMap.put("cevin", "cevin");
		userMap.put("aki", "aki");
	}

	private boolean isRegister(String user){
		if(userMap.get(user)!=null){
			return true;
		}
		return false;
	}
	
	private void saveCookie(String user, HttpServletResponse response){
		Cookie cookie = new Cookie(CommonUtils.COOKIE_USER, user);
		cookie.setDomain(getServletContext().getInitParameter("domain"));
		cookie.setMaxAge(Integer.parseInt(getServletContext().getInitParameter("cookieLife")));
		cookie.setPath("/");
		response.addCookie(cookie);
	}
}
分享到:
评论

相关推荐

    Iframe+Cookie实现简单的单点登录

    单点登录(Single Sign-On,简称SSO)是一种在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的技术。在这个示例中,我们将通过"Iframe+Cookie"的方式探讨如何实现简单的SSO。 首先,理解...

    单点登录的demo(使用cookie+filter实现)

    在这个“单点登录的demo(使用cookie+filter实现)”中,我们将深入探讨如何利用Cookie和Filter技术来实现一个简单的SSO系统。 **一、Cookie基础** Cookie是Web服务器存储在用户浏览器上的一小段数据,用于在用户与...

    sso_bbs(v2)(使用cookie+filter实现单点登录的第二个版本)

    综上所述,sso_bbs(v2)项目是通过Cookie和Filter技术实现单点登录的一个实例,它涉及到用户认证、请求过滤、安全策略等多个方面,是理解SSO机制和Web应用程序安全设计的重要案例。通过分析和实践这个项目,开发者...

    SSO单点登陆实现 cookie + jsonP 实现夸域单点登陆

    SSO(Single Sign-On)单点登录是一种...总结,通过cookie和JSONP的结合,我们可以构建一个基本的SSO系统,实现跨域的单点登录功能。然而,实际应用中还需考虑更多的安全措施和扩展性需求,以适应不断变化的网络环境。

    JEECG 单点登录说明文档

    JEECG智能开发平台的单点登录(SSO)功能是通过集成Kisso实现的,Kisso是一个轻量级Java权限框架,它利用加密会话cookie机制来实现单点登录服务。单点登录是一种用户登录认证方法,允许用户在多个应用系统中,只通过...

    .NET Core2.0+MVC 用session,cookie实现的sso单点登录

    .NET Core 2.0 和 MVC 框架的结合为开发者提供了一个强大的平台来构建现代Web应用程序,包括实现单点登录(SSO)系统。在SSO系统中,用户只需登录一次,就可以访问多个相互关联的应用程序,无需多次输入认证信息。本...

    单点登录原理与简单实现

    SAML提供了定义XML消息格式的标准,可以用于实现单点登录功能。 #### 四、总结 单点登录技术解决了多系统应用集群中的认证和授权问题,提高了用户体验的同时也加强了安全性。通过对会话机制的理解以及单点登录的...

    实现rtx单点登录使用sessionkey

    为了提升用户体验,RTX支持与其他应用系统集成,实现单点登录功能。 **Session Key的角色:** Session Key是在Web应用程序中用于安全会话管理的一个重要概念。当用户成功登录应用系统时,服务器会生成一个唯一的...

    JEECG 单点登录集成文档(kisso集成)

    - Kisso实现单点登录(SSO)使用的是加密会话cookie机制,这为系统提供了“无状态”和“分散验证”的特点。 - session信息存放在服务器端,而cookie则存放于客户端,存在两种状态。持久cookie具有时效性,文件形式...

    redmine配置sso单点登录插件

    redmine本身没有提供单点登录功能,这个插件可以提供redmine的单点登录。解压后将这两个文件放置在redmine目录的plugins目录中。具体操作参照README.md。每个解压文件中都有个EADME.md

    C#.net实现单点登录

    在IT行业中,C#.NET框架提供了丰富的功能来实现跨域单点登录。下面将详细讲解如何在ASP.NET环境下实现这一功能。 首先,SSO的核心在于有一个中心认证服务器,它负责验证用户的登录状态。在本案例中,`MasterSite`...

    sso-use-cookie单点登录

    总结,"sso-use-cookie"项目通过SpringBoot和Cookie实现了单点登录功能,适合有一定Spring基础的学习者了解SSO的基本原理和实践。通过深入学习和理解这个项目,开发者能够掌握如何在实际项目中应用SSO,提升系统的...

    单点登录系统的设计与实现

    假设一家公司希望在其内部多个业务系统间实现单点登录功能,可以通过以下步骤来实现: 1. **需求调研**:收集各部门对SSO的需求。 2. **技术选型**:决定采用OAuth 2.0协议和JWT(JSON Web Token)作为Token格式。 3...

    c#实现cookie和session的登陆实例

    这时可以使用Cookie的`Domain`属性设置允许访问的域,或者使用单点登录(Single Sign-On, SSO)技术。 5. **安全考虑**: - 不要在Cookie或Session中存储敏感信息,如明文密码。最好只存储一个可以验证身份的标识...

    JWT实现的单点登录系统Demo

    **JWT实现的单点登录系统Demo详解** 单点登录(Single Sign-On,简称SSO)是一种用户在多个应用系统中只需登录一次即可访问所有系统的身份验证机制。在现代Web应用程序中,SSO已经成为提高用户体验、简化管理的重要...

    java 基于 Cookie 的 SSO 中间件 kisso 低代码

    SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次进行身份验证。在Java环境中,实现SSO的一个常见方式是通过Cookie。Kisso是一个基于Cookie的轻量级...

    Web单点登录 禁止多用户登录

    总的来说,Web单点登录并禁止多用户登录的实现涉及多个层面的技术和策略,包括会话管理、权限控制、异常检测和响应机制,这些都是构建安全、高效网络服务的重要组成部分。通过合理的系统设计和实现,可以有效保护...

    完整的单点登录功能

    下面我们将深入探讨单点登录的工作原理、实现方式及其在实际应用中的关键点。 ### 单点登录的工作原理 SSO的核心思想是用户只需要验证一次身份,然后在整个系统或网络中被识别。这个过程通常涉及以下步骤: 1. ...

Global site tag (gtag.js) - Google Analytics