CASはユーザー登録を実現してから自動登録します.



1.CASについての紹介はもう疲れません.SSOに関わることがあると思いますが、このフレームについては全部知っているはずです.私達が現在採用しているCAS Serverのバージョンは3.4.2.1で、CAS Cientのバージョンは3.1.10です.
         CASプロジェクト公式:http://www.jasig.org/cas
         CAS登録処理には、CAS Cientと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.printipad.UsernamePassword Credentials
              b.Central Authentication ServiceはST(Service Ticket)と  TGT(TicketGranning Ticket)の認証サービス類.
                  そのデフォルトの実装クラス:org.jasig.cantral Authentication ServiceImpl
              c.Cookie RetrievingCookie Generatorは、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"/>
注:Central Authentication ServiceおよびticketGrantingTicketCookie Generatorについては、spring-configration/appication Contication Cotext.xmlおよびticketGrangTicketCookieGeneration.xmlにおいて宣言されています.