Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SpringSecurity & CAS, sso аутентификация 
V
    Опции темы
Samotnik
Дата 9.2.2010, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



Спасибо. MisterCleric,  garbuz,  но поиск по форуму именно c SSO не дает результатов. 
Вобщем кое как разобрался.  Имею :
Настроенный tomcat c SSO   по https://localhost:8443/cas/login   выскакивает мое окошко для регистрации. Есть сервер  cas.war подложенный в webapps  в томкате
теперь, я так понимаю, код не нужно писать, а нужно просто подложить нужные жарки под проект и законфигурять xml ? 
Смотрю этот пример  ничегошеньки не понятно  smile 

Я интуитивно мыслю так: Мне нужно как-то отредактировать web.xml (для логина) и добавиьт какой-то спринговский контекст для обработки этого кас сервера. так ? 

Нашел еще такой пример  но результат особо тоже нету ((((
Создал applicationContext.xml  положил туда это, но IDEA  подсвечивает следующее :
Код

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

            <bean
                id="authenticationManager"
                class="org.jasig.cas.authentication.AuthenticationManagerImpl">
                <property name="credentialsToPrincipalResolvers">
                    <list>
                        <bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" />
                        <bean class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver" />
                    </list>
                </property>

                <property name="authenticationHandlers">
                    <list>
                        <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" />
                        <bean class="org.acegisecurity.adapters.cas3.CasAuthenticationHandler">  //  это не может найти
                            <property name="authenticationManager" ref="acegiAuthenticationManager" />
                        </bean>
                    </list>
                </property>
            </bean>


            <bean id="inMemoryDaoImpl" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">  // Это не может найти
                  <property name="userMap">
                    <value>
                        marissa=koala,ROLES_IGNORED_BY_CAS
                        dianne=emu,ROLES_IGNORED_BY_CAS
                        scott=wombat,ROLES_IGNORED_BY_CAS
                        peter=opal,disabled,ROLES_IGNORED_BY_CAS
                    </value>
                </property>
            </bean>

            <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">  // Это не может найти
                 <property name="userDetailsService"><ref bean="inMemoryDaoImpl"/></property>
            </bean>

            <bean id="acegiAuthenticationManager" class="org.acegisecurity.providers.ProviderManager">  // Это не может найти
                <property name="providers">
                  <list>
                    <ref bean="daoAuthenticationProvider"/>
                  </list>
                </property>
            </bean>
        </beans>



Добавлено через 7 минут и 22 секунды
или, мне это вообще не нужно, если сервер уже есть и работает ?  
PM MAIL   Вверх
Samotnik
Дата 9.2.2010, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



Вобщем. еще немного почитал и разобрался. 
Судя по всему у меня лежит jasig cas server  smile  
значит так. 
имеется : 
sso tomcat -  по адресу https://localhost:8443/cas/login
tomcat c веб приложением - по адресу http://localhost:8080/
мой web.xml
Код

 <context-param>  
         <param-name>contextConfigLocation</param-name>
         <param-value>/WEB-INF/applicationContext.xml</param-value>
     </context-param>

    <filter>
      <filter-name>CAS Authentication Filter</filter-name>
      <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
      <init-param>
        <param-name>casServerLoginUrl</param-name>
        <param-value>https://localhost:8443/cas/login</param-value>
      </init-param>
    </filter>

    <filter-mapping>
        <filter-name>CAS Authentication Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


applicationContext.xml
Код

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:sec="http://www.springframework.org/schema/security"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
       http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.1.xsd">

    <description> Description ...</description>

    <bean name="CAS Authentication Filter"    class="org.jasig.cas.client.authentication.AuthenticationFilter"
        p:casServerLoginUrl="https://localhost:8443/cas/login"
        p:renew="false"
        p:gateway="false"
        p:service="http://localhost:8080/" />

    
</beans>



запускаю приложение.  Томкат пишет вот такую ошибку 
Цитата

SEVERE: Exception starting filter CAS Authentication Filter
java.lang.IllegalArgumentException: serverName or service must be set.
    at org.jasig.cas.client.util.CommonUtils.assertTrue(CommonUtils.java:82)
    at org.jasig.cas.client.util.AbstractCasFilter.init(AbstractCasFilter.java:77)
    at org.jasig.cas.client.authentication.AuthenticationFilter.init(AuthenticationFilter.java:69)
    at org.jasig.cas.client.util.AbstractCasFilter.init(AbstractCasFilter.java:63)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3800)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4450)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630)
    at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:556)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:516)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
09.02.2010 16:47:35 org.apache.catalina.core.StandardContext start


что подскажите ?

Добавлено через 1 минуту и 12 секунд
Ведь service у меня задан  smile   что не так ? 
Может не до конца всё законфигурял ? 
PM MAIL   Вверх
Samotnik
Дата 9.2.2010, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



Что- то заработало smile    smile 
web.xml
Код

<context-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>/WEB-INF/applicationContext.xml</param-value>
     </context-param>

    <filter>
      <filter-name>CAS Authentication Filter</filter-name>
      <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
      <init-param>
        <param-name>casServerLoginUrl</param-name>
        <param-value>https://localhost:8443/cas/login</param-value>
      </init-param>
      <init-param>
        <param-name>serverName</param-name>
        <param-value>http://localhost:8090</param-value>
      </init-param>
    </filter>

    <filter>
      <filter-name>CAS Validation Filter</filter-name>
      <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
      <init-param>
        <param-name>casServerUrlPrefix</param-name>
        <param-value>https://localhost:8443/cas</param-value>
      </init-param>
      <init-param>
        <param-name>serverName</param-name>
        <param-value>http://localhost:8090</param-value>
      </init-param>
    </filter>

    <filter-mapping>
        <filter-name>CAS Authentication Filter</filter-name>
        <url-pattern>/auth</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>CAS Authentication Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


applicationContext.xml
Код

<?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:p="http://www.springframework.org/schema/p"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:sec="http://www.springframework.org/schema/security"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.1.xsd">
     <description>Description</description>  

    <bean name="authenticationFilter" class="org.jasig.cas.client.authentication.AuthenticationFilter"
        p:casServerLoginUrl="https://localhost:8443/cas/login"
        p:renew="false"
        p:gateway="false"
        p:service="http://localhost:8090/mainpage" />

    <bean name="ticketValidationFilter"    class="org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter"
        p:service="http://localhost:8090/mainpage">
        <property name="ticketValidator">
            <bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
                <constructor-arg index="0" value="https://localhost:8443/cas" />
            </bean>
        </property>
    </bean>

</beans>


значит вот что сейчас происходит : 
Загружаю приложение localhost:8090/ -  меня перекидывает на мой  КАС  smile      но блин, не все так круто smile  я то ввожу логин/пароль, а мне в ответ, что не верный логин/пароль.   smile   
С чем это может быть связанно ? 

А вообще мой  applicationContext.xml правильный ?

Добавлено через 10 минут и 18 секунд
хахаах 
я закоментировал строчку в  web.xml
Код

<context-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>/WEB-INF/applicationContext.xml</param-value>
     </context-param>


и тоже самое происходит smile)))
Видимо мой applicationContext.xml вообще не читается smile 
PM MAIL   Вверх
Samotnik
Дата 9.2.2010, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



кто-нибудь что-нибудь может посоветовать ? 
Я в тупике  smile 
Срабатывает CAS сервер, но после ввода логин/паролль пишет что не верно и все   smile 
PM MAIL   Вверх
MisterCleric
Дата 9.2.2010, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Samotnik, Вот если бы сталкивались с такими задачами, то что б и подсказали...
А так приятно наблюдать, что хоть кто-то свои мысли и продвижения по решению задачи тут высказывает. Спасибо тебе.
Единственное, что меня смущает, что у тебя дублируется код как в web.xml так и applicationContext.xml 


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
dobrolub
Дата 9.2.2010, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 4
Всего: 16



предложу два варианта, чтобы подсмотреть что-же в действительности происходит

1. подсмотреть запросы и ответы к сервакам (firefox + httpfox plugin) (firefox + taperdata plugin)
2. включить логгинг в спринге и cas и почитать логи. 

сам-бы наверно начал с номера 1 smile

PM   Вверх
Samotnik
Дата 10.2.2010, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



Цитата(dobrolub @  9.2.2010,  22:26 Найти цитируемый пост)
httpfox plugin

подскажи пажалста как им пользоваться ? на что смотреть ? 
Я установил, но по моему  firebug  больше полезной инфы выдает, чем эта штука. Или я не туда смотрю ? 
PM MAIL   Вверх
dobrolub
Дата 10.2.2010, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 4
Всего: 16



в плагине надо смотреть на кукис, на редиректы и на значения http headers. и пытатъся понять, что эти два сервака делают (cas и собственно аппликуха) и что им не хватает.
PM   Вверх
Samotnik
Дата 11.2.2010, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



вобщем, проблема решена  smile 
фуф блин. Значит так, если нужно сделать ображение к кас серверу, то спринг не нужен (ну впринципе и можно прикрутить, по желанию) 
значит так, все предельно просто smile  в web.xml  просто мапим фильтры
Код

 <filter>
        <filter-name>CAS Authentication Filter</filter-name>
        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>http://localhost:8090/</param-value>
        </init-param>
        <init-param>
            <param-name>casServerLoginUrl</param-name>
            <param-value>https://localhost:8443/cas/login</param-value>
        </init-param>
        <init-param>
            <param-name>service</param-name>
            <param-value>http://localhost:8090/auth</param-value>
        </init-param>
    </filter>    

    <filter>
      <filter-name>CAS Validation Filter</filter-name>
      <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
      <init-param>
        <param-name>casServerUrlPrefix</param-name>
        <param-value>https://localhost:8443/cas</param-value>
      </init-param>
      <init-param>
        <param-name>serverName</param-name>
        <param-value>http://localhost:8090</param-value>
      </init-param>
      <init-param>
          <param-name>redirectAfterValidation</param-name>
          <param-value>true</param-value>
      </init-param>
    </filter>
   
    <filter>
      <filter-name>CAS Assertion Thread Local Filter</filter-name>
      <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
    </filter>

    <filter>
       <filter-name>CAS Single Sign Out Filter</filter-name>
       <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>       
    </filter>


    <filter-mapping>
        <filter-name>CAS Authentication Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>CAS Validation Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>CAS Assertion Thread Local Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
       <filter-name>CAS Single Sign Out Filter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>


    <listener>
        <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
    </listener>


и все smile  больше собственно ничего и не нужно.   
Еще, если вам нужно будет впоследствии выцепить имя пользователя, который залогинился, то это можно сделать вот так
Код

String userName = AssertionHolder.getAssertion().getPrincipal().getName();


Спасибо всем за посильную помощь  smile   и Sten'у за помощь по аське smile)) 


Пэ.Эс.
Могу еще выложить маппинг со Спрингом
PM MAIL   Вверх
Ninken
Дата 13.5.2010, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 16.10.2007

Репутация: нет
Всего: нет



удалено

Это сообщение отредактировал(а) Ninken - 18.5.2010, 10:18
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0562 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.