Рабочий пример клиента JAVA REST для доступа к API CAS REST

я следовал этой учебник для включения службы REST на моем локальном сервере CAS.

однако нет примера Java

"на Java пример REST-клиента

нам нужен реальный, рабочий, пример, предыдущий бесполезен. Многие люди писали мне, что это не работает, и я подтверждаю, что это не работает."

Я смог найти этой но это, к сожалению, не сработало для меня.

любой указатели/ссылки? Ценится.

4 ответов


понял!

вот полное решение о том, как включить CAS REST API и иметь возможность подключиться к нему через Java rest client, чтобы принести пользу другим

  • получить исходный код CAS.
  • комментарий этой статьи
  • добавить следующее в pom.xml, как предложено в статье в #2

<dependency> <groupId>org.jasig.cas</groupId> <artifactId>cas-server-integration-restlet</artifactId> <version>${cas.version}</version> <type>jar</type> </dependency>

  • обязательно добавьте в pom следующее.xml, чтобы избежать столкновений Spring jar. В моем случае, cas-server-integration-restlet зависел от spring-web, который по умолчанию использовал более старую версию Spring. Итак, я явно определил

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.1.1.RELEASE</version> </dependency>

  • скомпилируйте код cas. Надо позвать Каса.война в вашей целевой папке.
  • загрузите его на свой сервер, измените разрешения на tomcat и дождитесь его развертывания
  • в CATALINA / conf найти сервер.конфигурация порта xml и uncomment 8443, чтобы наш сервер разрешил SSL подключение. Кроме того, укажите свои сертификаты здесь.
  • Теперь перейдите к взорванному cas.файл war и перейдите в папку WEB-INF, чтобы найти deployerConfigContext.XML-файл. Укажите, что CAS будет использовать для аутентификации. В моем случае я использовал LDAP.
  • добавить следующее В web.xml на статью выше

<servlet> <servlet-name>restlet</servlet-name> <servlet-class>com.noelios.restlet.ext.spring.RestletFrameworkServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>

<servlet-mapping> <servlet-name>restlet</servlet-name> <url-pattern>/v1/*</url-pattern> </servlet-mapping>

  • перезапустите tomcat, чтобы изменения вступили в силу.
  • проверьте, что вы можете войти в систему через стандарт CAS UI:https://server:8443/cas/login
  • проверьте, что REST API был открыт через:https://server:8443/cas/v1/tickets
  • теперь давайте подключимся к нему. Я использовал этой пример кода. Не забудьте указать правильные ссылки и имя пользователя/пароль
  • когда я попытался запустить код как есть, он пожаловался на " вызвано: javax.сеть.ssl.SSLHandshakeException: солнце.безопасность.валидатор.ValidatorException: ошибка построения пути PKIX: sun.безопасность.поставщик.certpath.SunCertPathBuilderException: не удается найти допустимый путь сертификации в требуемое целевое". В основном просят вас установить сертификаты. Если у вас есть доступ к серверу, просто скопируйте его. Если нет, я нашел этой код, который позаботится об установке для вас, если у вас нет доступа или просто слишком ленивый:)
  • теперь, если вы запустите клиент JAVA CAS с действительными учетными данными, вы должны увидеть что-то вроде
201
https://server_name:8443/cas/v1/tickets/TGT-4-rhVWLapYuOYi4InSEcmfNcABzaLMCPJgGIzlKqU1vb50zxb6pp-server_name
Tgt is : TGT-4-rhVWLapYuOYi4InSEcmfNcABzaLMCPJgGIzlKqU1vb50zxb6pp-server_name.ndev.coic.mil
Service url is : service=https%3A%2F%2Fmyserver.com%2FtestApplication
https://server_name:8443/cas/v1/tickets/TGT-4-rhVWLapYuOYi4InSEcmfNcABzaLMCPJgGIzlKqU1vb50zxb6pp-server_name
Response code is:  200
200
ST-4-BZNVm9h6k3DAvSQe5I3C-server_name
  • вы можете увидеть 200 код и билет. Если вы были чтобы просмотреть журналы вашего cas на сервере, вы должны увидеть сообщения об успешной athentication и генерации билетов.
  • измените имя пользователя / пароль на некоторые фиктивные данные и попробуйте запустить код. Вы получите сообщение об ошибке 400, что означает, что разрешение на доступ было отказано.

успехов!


для CAS 4.0 это немного проще (протестировано на apache-tomcat-7.0.55)

В пом.xml добавить следующую зависимость

    <dependency>
        <groupId>org.jasig.cas</groupId>
        <artifactId>cas-server-integration-restlet</artifactId>
        <version>4.0.0</version>
        <scope>runtime</scope>
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

прямая зависимость от springframework не обязательно, потому что исключения предотвращают дублирование пакетов

в интернете.xml вам нужно добавить сопоставление сервлетов для restlet (пакет mind изменился с com.ноэлиос.restlet... к org.restlet...

    <servlet>
        <servlet-name>restlet</servlet-name>
        <servlet-class>org.restlet.ext.spring.RestletFrameworkServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>restlet</servlet-name>
        <url-pattern>/v1/*</url-pattern>
    </servlet-mapping>  

в результате вышеуказанных шагов в YUOR WEB-INF / lib каталог после новых файлов должны быть добавлены

ls target/cas/WEB-INF/lib/ | grep restlet
cas-server-integration-restlet-4.0.0.jar
org.restlet-2.1.0.jar
org.restlet.ext.servlet-2.1.0.jar
org.restlet.ext.slf4j-2.1.0.jar
org.restlet.ext.spring-2.1.0.jar

Если вы хотите пропустить проверку сертификата, добавьте это в свой клиент Java

//////////////////////////////////////////////////////////////////////////////////////
// this block of code turns off the certificate validation so the client can talk to an SSL
// server that uses a self-signed certificate
//
// !!!! WARNING make sure NOT to do this against a production site
//
// this block of code owes thanks to http://www.exampledepot.com/egs/javax.net.ssl/trustall.html
//

TrustManager[] trustAllCerts = new TrustManager[] {
    new X509TrustManager() {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType){}

        public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType){}
    }
};

SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());

//
//
// end of block of code that turns off certificate validation
// ////////////////////////////////////////////////////////////////////////////////////

обычно разработчики путаются в том, как заставить клиента rest работать при доступе к защищенной веб-службе CAS. Большинство вопросов там спрашивали, Как получить restlet CAS обеспечивает веб-сервис и как вызвать этот веб-сервис, потому что никакой реальный пример не работал.

ну на самом деле есть. Groovy пример находится на примере restlet JASIG Cashttps://wiki.jasig.org/display/casum/restful + api ясно показывает, как пройти аутентификацию для вызова службы (ее использование Groovy, но преобразование в Java должно быть прямым). Но, на мой взгляд, это не ясно объясняет, что клиент должен аутентифицироваться в назначенной веб-службе сначала перед доступом к защищенной веб-службе CAS.

например, предположим, что существует служба JSON, которая защищена с помощью CAS и сборки с Java и Spring. И вы используете код, который описывает в разделе groovy на https://wiki.jasig.org/display/casum/restful + api

String casUrl="https://yourcas.com/v1/tickets"
String springTicketValidation="http://yourservice.com/j_spring_cas_security_check"
String serviceToCall="http://yourservice.com/serviceToCall"

чтобы получить клиент сервиса сможет позвонить в сервис, нужно следовать этим простым правилам:

  1. получите билет на предоставление билета от CAS
  2. получите свой сервисный билет от cas для назначенного сервисного вызова (service to call)
  3. аутентификация в вашем сервисном валидаторе билетов (на данный момент url указан в springTicketValidation)
  4. наконец-вызова

или в перспективе кода

String ticketGrantingTicket = getTicketGrantingTicket(casUrl, username, password)
String serviceTicket = client.getServiceTicket(casUrl, ticketGrantingTicket, serviceToCall)
// validate your ticket first to your application
getServiceCall(springTicketValidation, serviceTicket)
getServiceCall(serviceToCall, serviceTicket)

и для вашего Примечания все эти операции должны выполняться в следующем состоянии:

  1. ваш вызов (как вызов restlet, так и вызов службы) должен быть выполнен в том же