CAS 설정(1)-통합 RESTFul

CAS 단일 로그 인 서버 는 B/S 의 응용 프로그램 에 의 해 사용 되 는 경우 가 많 습 니 다.그러면 이미 일부 시스템 이 CS 인 경우 어떻게 호출 합 니까?이 럴 때 는 웹 서 비 스 를 사용 하여 CS 의 시스템 에 호출 해 야 합 니 다.먼저 선 결 조건 을 말씀 드 리 겠 습 니 다.
1)필요 한 jar 가방 을 통합 합 니 다.이것 은 필수 입 니 다.
com.noelios.restlet.ext.servlet-1.1.1.jar
com.noelios.restlet.ext.spring-1.1.1.jar
com.noelios.restlet-1.1.1.jar
org.restlet.ext.spring-1.1.1.jar
org.restlet-1.1.1.jar
cglib-2.2.jar
cas-server-integration-restlet-3.4.7.jar
2)설정,웹.xml 에 servlet 설정 추가

restlet com.noelios.restlet.ext.spring.RestletFrameworkServlet 1
  restlet /v1/*
그러면 저희 CS 클 라 이언 트 는 어떻게 처리 하고 사용자 데 이 터 를 어떻게 받 습 니까?세 번 의 상호작용 이 있어 야 사용자 데 이 터 를 얻 을 수 있다.
1)CS 클 라 이언 트 는 사용자 이름과 비밀 번 호 를 제공 합 니 다.요청http://localhost:8080/TFP-S/v1/tickets,사용자 가 합 법 적 이면 TGT 데 이 터 를 얻 을 수 있 습 니 다.
2)TGT 와 service 에 따라 ST 어음 을 취득 하고 요청 한 경 로 는 다음 과 같다.http://localhost:8080/TFP-S/v1/tickets/TGT_번호
3)ST 어음 을 검증 하고 사용자 정 보 를 얻 는 XML 형식 정보.
샘플 코드 는 다음 과 같 습 니 다.
public class Client {

	public static String getTicket(final String server, final String username, final String password,
			final String service) {
		notNull(server, "server must not be null");
		notNull(username, "username must not be null");
		notNull(password, "password must not be null");
		notNull(service, "service must not be null");

		return getServiceTicket(server, getTicketGrantingTicket(server, username, password), service);
	}

	/**
	 *   ST
	 * @param server
	 * @param ticketGrantingTicket
	 * @param service
	 */
	private static String getServiceTicket(final String server, final String ticketGrantingTicket, final String service) {
		if (ticketGrantingTicket == null)
			return null;

		final HttpClient client = new HttpClient();

		final PostMethod post = new PostMethod(server + "/" + ticketGrantingTicket);

		post.setRequestBody(new NameValuePair[] { new NameValuePair("service", service) });

		try {
			client.executeMethod(post);

			final String response = post.getResponseBodyAsString();

			switch (post.getStatusCode()) {
			case 200:
				return response;

			default:
				warning("Invalid response code (" + post.getStatusCode() + ") from CAS server!");
				info("Response (1k): " + response.substring(0, Math.min(1024, response.length())));
				break;
			}
		}

		catch (final IOException e) {
			warning(e.getMessage());
		}

		finally {
			post.releaseConnection();
		}

		return null;
	}

	/**
	 * @param server
	 * @param username
	 * @param password
	 */
	private static String getTicketGrantingTicket(final String server, final String username, final String password) {
		final HttpClient client = new HttpClient();

		final PostMethod post = new PostMethod(server);

		post.setRequestBody(new NameValuePair[] { new NameValuePair("username", username),
				new NameValuePair("password", password) });

		try {
			client.executeMethod(post);

			final String response = post.getResponseBodyAsString();
			info("TGT="+response);
			switch (post.getStatusCode()) {
			case 201: {
				final Matcher matcher = Pattern.compile(".*action=\".*/(.*?)\".*").matcher(response);

				if (matcher.matches())
					return matcher.group(1);

				warning("Successful ticket granting request, but no ticket found!");
				info("Response (1k): " + response.substring(0, Math.min(1024, response.length())));
				break;
			}

			default:
				warning("Invalid response code (" + post.getStatusCode() + ") from CAS server!");
				info("Response (1k): " + response.substring(0, Math.min(1024, response.length())));
				break;
			}
		}

		catch (final IOException e) {
			warning(e.getMessage());
		}

		finally {
			post.releaseConnection();
		}

		return null;
	}

	private static void ticketValidate(String serverValidate, String serviceTicket, String service) {
		notNull(serviceTicket, "paramter 'serviceTicket' is not null");
		notNull(service, "paramter 'service' is not null");

		final HttpClient client = new HttpClient();
		GetMethod post = null;

		try {
			post = new GetMethod(serverValidate+"?"+"ticket="+serviceTicket+"&service="+URLEncoder.encode(service, "UTF-8"));
			client.executeMethod(post);

			final String response = post.getResponseBodyAsString();
			info(response);
			switch (post.getStatusCode()) {
			case 200: {
				info("        ");
			}
			default: {

			}
			}

		} catch (Exception e) {
			warning(e.getMessage());
		} finally {
			//    
			post.releaseConnection();
		}

	}

	private static void notNull(final Object object, final String message) {
		if (object == null)
			throw new IllegalArgumentException(message);
	}

	public static void main(final String[] args) throws Exception {
		final String server = "http://localhost:8080/TFP-S/v1/tickets";
		final String username = "username";
		final String password = "username";
		final String service = "http://localhost:8080/service";
		final String proxyValidate = "http://localhost:8080/TFP-S/proxyValidate";

		
		ticketValidate(proxyValidate, getTicket(server, username, password, service), service);
		
	}

	private static void warning(String msg) {
		System.out.println(msg);
	}

	private static void info(String msg) {
		System.out.println(msg);
	}

}

돌아 오 는 사용자 정보 가 어떤 형식 인지 잘 모 르 면 다음은 xml 형식 입 니 다.
이 양식 은 어떻게 수정 합 니까?한 가지 더 말씀 드 리 겠 습 니 다.바로 CAS 서버 에 caserviceValidationFailure.jsp 파일 이 있 는 지 아 닌 지.참,되 돌아 가기 로 한 xml 형식 입 니 다.Filter 를 사용 하면 이 xml 을 전달 합 니 다.어음 을 검증 하 는 필터 일 뿐 이 xml 를 Assertion 대상 으로 변환 합 니 다.알 겠 지?

좋은 웹페이지 즐겨찾기