当前位置:首页 > 开发 > 开源软件 > 正文

CAS 之 实现用户注册后自动登录

发表于: 2010-11-08   作者:denger   来源:转载   浏览次数:
摘要:      1. 关于CAS的介绍不再累述,我想涉及过SSO同学应该都会对该框架所有了解,我们目前项目采用的CAS Server 版本为 3.4.2.1, 其 CAS Client 版本为 3.1.10。          CAS项目官方:http://www.jasig.
     1. 关于CAS的介绍不再累述,我想涉及过SSO同学应该都会对该框架所有了解,我们目前项目采用的CAS Server 版本为 3.4.2.1, 其 CAS Client 版本为 3.1.10。
         CAS项目官方:http://www.jasig.org/cas
         本文讲述CAS登录处理未包括 CAS Client 与 Server 端的对 ST 采用SMAL验证的流程。

     2. 对于登录其主要处理流程:
         注册成功后 -> 调用CAS登录处理的相关模块 -> 验证用户名密码 -> 生成TGT -> 生成TG -> Add ST&TGT至相关Register类 -> Add TGT至Cookie -> 重定向至 cas/login URL -> 完成


     3.  CAS 登录处理主要模块(类):
              a. Credentials  用于存储用户登录认证信息接口。
                  其默认实现类:org.jasig.cas.authentication.principal.UsernamePasswordCredentials

              b. CentralAuthenticationService 用于生成 ST(Service Ticket) 和  TGT(TicketGrantingTicket)的认证服务类。
                  其默认实现类: org.jasig.cas.CentralAuthenticationServiceImpl

              c. CookieRetrievingCookieGenerator 用于将TGT添加至Cookie及对Cookie进行管理。


     4.  具体实现代码:

 /**
	 * user register process and automatic login.
	 * @param userForm the user information object.
	 * @param request  the HttpServletRequest object
	 * @param response the HttpServletResponse object
	 * @return get result view
	 */
	protected ModelAndView handleUserRegisterInternal(UserInfoVo userForm, HttpServletRequest request, HttpServletResponse response) {
		
		ModelAndView signinView = new ModelAndView(REGISTER_VIEW);;
		final boolean isUnique = userService.checkUserUnique(userForm.getLoginName());
		final boolean isRegistered = isUnique ? registerUser(userForm, request, response) : false;

		if (isRegistered) {
			bindTicketGrantingTicket(userForm.getLoginName(), userForm.getLoginPassword(), request, response);
			signinView.setViewName(getSignInView(request));
		}
		return signinView;
	}

          
 /**
	 * Invoke generate validate Tickets and add the TGT to cookie.
	 * @param loginName 	the user login name.
	 * @param loginPassword the user login password.
	 * @param request		the HttpServletRequest object.
	 * @param response		the HttpServletResponse object.
	 */
	protected void bindTicketGrantingTicket(String loginName, String loginPassword, HttpServletRequest request, HttpServletResponse response){
		try {
			UsernamePasswordCredentials credentials = new UsernamePasswordCredentials();
			credentials.setUsername(loginName);
			credentials.setPassword(loginPassword);
			String ticketGrantingTicket = centralAuthenticationService.createTicketGrantingTicket(credentials);
			ticketGrantingTicketCookieGenerator.addCookie(request, response, ticketGrantingTicket);
		} catch (TicketException te) {
			logger.error("Validate the login name " + loginName + " failure, can't bind the TGT!", te);
		} catch (Exception e){
			logger.error("bindTicketGrantingTicket has exception.", e);
		}
	}



 /**
	 * Get the signIn view URL.
	 * @param request the HttpServletRequest object.
	 * @return redirect URL
	 */
	protected String getSignInView(HttpServletRequest request) {
		String service = ServletRequestUtils.getStringParameter(request, "service", "");
		return ("redirect:login" + (service.length() > 0 ? "?service=" + service : ""));
	}

   
cas-servlet.xml 相关代码:
	<bean id="registerController" class="com.xxxxx.sso.web.RegisterController" 
		p:userService-ref="userService"
		p:validator-ref="registerValidator"
		p:centralAuthenticationService-ref="centralAuthenticationService"
		p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator"/>

注: 关于centralAuthenticationService及ticketGrantingTicketCookieGenerator已声明在 spring-configuration/applicationContext.xml 和 ticketGrantingTicketCookieGenerator.xml中

CAS 之 实现用户注册后自动登录

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
一.开发准备: 环境: OS:windows xp IDE:myeclipse 6.0 web服务器:tomcat 6.0 JDK: jdk1.6.0_05 数
CAS介绍 开源的企业级单点登录解决方案 CAS Server 是需要独立部署的 Web 应用 CAS Client 支持非常
CAS介绍 开源的企业级单点登录解决方案 CAS Server 是需要独立部署的 Web 应用 CAS Client 支持非常
源码 下载 半成品源码下载地址: http://pan.baidu.com/s/1bn91N6B 文件结构 actions包定义了struts
参考以下两篇文章,对原作者表示感谢: http://blog.csdn.net/small_love/article/details/6664831 h
单点登录系统CAS搭建及取得更多用户信息的实现 一、 单点登录简介 单点登录(Single sign-on,简称
在业务系统的操作过程中,有时候,用户需要切换用户进行重新登录,这种情况有时候是因为一个人管理
在业务系统的操作过程中,有时候,用户需要切换用户进行重新登录,这种情况有时候是因为一个人管理
背景: 在phpwind站点后台添加一个名为“广告管家”(广告管家为CNZZ的一款广告投放的应用)的应用
javaBean的代码 package bean; import java.io.Serializable; public class Admin implements Seria
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号