클래스 QQ 클라이언트가 공간을 열고 Yale CAS를 이용하여 데스크톱 클라이언트 소프트웨어를 로그인한 후 사이트로 이동하여 자동으로 로그인합니다

6499 단어 자동 로그인cas
일반적으로 프로젝트를 할 때 이런 요구를 만날 수 있다. CAS 클라이언트 응용 프로그램이 사용자 등록 기능을 완성한 후에 CAS 서버로 직접 이동하여 로그인하고 사용자 정의 클라이언트의 페이지를 표시한다.사용자가 등록을 마친 후 CAS 서버 로그인 페이지에 다시 로그인하여 로그인하는 것이 아닙니다.이것이 바로 사용자 등록을 마친 후 자동으로 로그인하는 기능이다.이 글의 카스 서버 버전은 3.4.6이고 클라이언트는 3.2.0입니다. 
 
 
2 구현 프로세스: 등록 성공 후 (클라이언트 완료) -> CAS 사이드 처리 모듈 호출 -> 사용자 이름 비밀번호 확인 -> TGT 생성 -> 관련 레지스터 클래스에 ST & TGT 추가 -> 쿠키에 TGT 추가 -> 카스/login URL 리디렉션 -> 완성 3CAS 로그인 처리 주요 모듈(클래스): a. Credentials는 사용자 로그인 인증 정보 인터페이스를 저장하는 데 사용됩니다.기본 구현 클래스: org.jasig.cas.authentication.principal.Username Password Credentials b. Central Authentication Service는 ST(Service Ticket)와 TGT(Ticket Granting Ticket)의 인증 서비스 클래스를 생성하는 데 사용됩니다.기본 구현 클래스: org.jasig.cas.Central Authentication ServiceImpl c. CookieRetrieving CookieGenerator는 TGT를 쿠키에 추가하고 쿠키를 관리하는 데 사용됩니다.
 
네 가지 구체적인 절차 1.새 프로젝트, 새 로그인 후 자동 로그인 처리 클래스
 
1단계: 사용자 이름 비밀번호 획득, 유효성 검증, 관련 어음 생성 및 등록 귀속, 쿠키 추가
protected ModelAndView handleRequestInternal(HttpServletRequest request,
            HttpServletResponse response) throws Exception
    {
        ModelAndView signinView=new ModelAndView();
        String username=request.getParameter("username");
        String password=request.getParameter("password");
        // , , 
        bindTicketGrantingTicket(username, password, request, response);
        String viewName=getSignInView(request);
        signinView.setViewName(getSignInView(request));
        return signinView;
    }

 
 
 
원문 코드:
 /**
	 * 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;
	}

 
 
 
 
 
 
2단계: 관련 어음을 구체적으로 생성하고 귀속 등록, 쿠키 추가 실현 방법
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);
        }
    }

 
 
 
3단계: 서비스 매개 변수 가져오기 및 페이지 건너뛰기
        
protected String getSignInView(HttpServletRequest request) {
        String service = ServletRequestUtils.getStringParameter(request, "service", "");
        return ("redirect:login" + (service.length() > 0 ? "?service=" + service : ""));
    }

 
 
 
 
     2.프로젝트에서 CAS 관련 클래스를 가져오고centralAuthenticationService와ticketGrantingTicketCookieGenerator 및setter를 성명하며 오류가 없음을 확인한 후jar패키지를 CAS/lib로 내보냅니다.
 
 
 
     3.CAS의 cas-servlet을 엽니다.xml 파일, mapping 속성에 추가:
    
<prop
          key="/registerLogin">
          registerLoginController
    </prop>

 
 
다음에 이러한 등록을 추가합니다.
     
<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"/>

 
 
마지막 단계, 웹을 엽니다.xml, 추가:
      
 <servlet-mapping>
          <servlet-name>cas</servlet-name>
          <url-pattern>/registerLogin</url-pattern>
       </servlet-mapping>

 
 
 
참고:
1. centralAuthenticationService 및 ticketGrantingTicketCookieGenerator에 대해 스프링 구성/응용 프로그램 컨텍스트에 명시되어 있습니다.xml 및 ticketGranting TicketCookieGenerator.xml에서 여기까지 이 기능 구축 과정이 모두 완료되었습니다. CAS 클라이언트가 등록 기능을 완성한 후에 CAS 대외 인터페이스 카스/register Login을 직접 호출합니까?username=admin &password=admin (비밀번호는 특수 암호화를 통해 전달할 수 있지만 복호화 가능) & 서비스=http://localhost:8080/test(여기는 예시입니다. get 방식으로 전달되었고 실제 응용에서post 방식으로 전달할 수 있습니다.)
 
 
2.denger 원문 작성자의 공헌에 감사 드립니다http://denger.iteye.com/blog/805743
 
 
3. 참고로 다운로드할 수 있도록 작성된jar 패키지를 따로 업로드하고lib에 직접 내려 카스-servlet을 수정합니다.xml,web.xml로 실행할 수 있습니다. 원본 코드를 역컴파일할 수 있습니다.
 
 
본문은 다음과 같다.http://binghejinjun.iteye.com/blog/1701688, 일부 수정이 있습니다.
 
 
------------------------------------------------------------------------
사실 이 기능을 실현하려면 카스의rest 인터페이스로 검증하고 티켓을 가져온 다음에 페이지를 열 때 매개 변수 티켓=XX를 끼우면 됩니다. 이렇게 큰 바퀴를 돌게 된 이유는 이전에 검증할 때 가지고 있던 서비스 매개 변수 URL 뒤에 "/"번호가 없어져서 검증할 때의domain과 열린domain이 다르고 티켓 루트가 무효화되는 오류가 발생했기 때문입니다.정말 억울하다.나로 하여금 4일의 시간을 낭비하게 하다.

좋은 웹페이지 즐겨찾기