클래스 QQ 클라이언트가 공간을 열고 Yale CAS를 이용하여 데스크톱 클라이언트 소프트웨어를 로그인한 후 사이트로 이동하여 자동으로 로그인합니다
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 파일,
<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일의 시간을 낭비하게 하다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
클래스 QQ 클라이언트가 공간을 열고 Yale CAS를 이용하여 데스크톱 클라이언트 소프트웨어를 로그인한 후 사이트로 이동하여 자동으로 로그인합니다CAS 클라이언트 응용 프로그램이 사용자 등록 기능을 완성한 후에 CAS 서버로 직접 이동하여 로그인하고 사용자 정의 클라이언트의 페이지를 표시한다.사용자가 등록을 마친 후 CAS 서버 로그인 페이지에 다시 로그인하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.