Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите организовать авторизацию через Spring Security / 6 сообщений из 6, страница 1 из 1
10.09.2014, 16:54
    #38743303
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите организовать авторизацию через Spring Security
Добрый день !

Есть система с классической авторизацией Spring Security.

как описано тут

http://ru.wikibooks.org/wiki/Spring_Security/Ключевые_сервисы_Spring_Security

конфигурация описана ниже.

Схема классическая

есть MyAuthenticationFilter , есть UsernamePasswordAuthenticationToken , UserDetailsService с loadUserByUsername итд.
Есть база с пользователями и ролями ...


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
<beans:beans xmlns="http://www.springframework.org/schema/security"
             xmlns:beans="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
           http://www.springframework.org/schema/security
           http://www.springframework.org/schema/security/spring-security-3.1.xsd">

    <global-method-security jsr250-annotations="enabled" pre-post-annotations="enabled"/>

    <beans:bean id="springSecurityFilterChain" class="org.springframework.security.web.FilterChainProxy">
      <filter-chain-map path-type="ant">
         <filter-chain pattern="/**" filters="
               securityContextPersistenceFilter,
               logoutFilter,
               loginFormFilter,
               securityContextHolderAwareFilter,
               rememberMeAuthenticationFilter,
               exceptionTranslationFilter,
               filterSecurityInterceptor,
               removeCurrentUserFilter" />
      </filter-chain-map>
    </beans:bean>


    <beans:bean id="filterSecurityInterceptor" class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
        <beans:property name="authenticationManager" ref="authenticationManager"/>
        <beans:property name="accessDecisionManager" ref="accessDecisionManager"/>
        <beans:property name="securityMetadataSource">
            <filter-security-metadata-source>
                <intercept-url pattern="/user/**" access="ROLE_USER"/>
                <intercept-url pattern="/admin/**" access="ROLE_ADMIN"/>
            </filter-security-metadata-source>
        </beans:property>
    </beans:bean>

    <beans:bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
        <beans:property name="decisionVoters">
            <beans:list>
                <beans:bean class="org.springframework.security.access.vote.RoleVoter"/>
                <beans:bean class="org.springframework.security.access.vote.AuthenticatedVoter"/>
            </beans:list>
        </beans:property>
    </beans:bean>

    <beans:bean id="securityContextPersistenceFilter" class="org.springframework.security.web.context.SecurityContextPersistenceFilter">
        <beans:property name="forceEagerSessionCreation" value="true"/>
    </beans:bean>

    <beans:bean id="securityContextHolderAwareFilter" class="org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter"/>


    <beans:bean id="exceptionTranslationFilter" class="org.springframework.security.web.access.ExceptionTranslationFilter">
        <beans:property name="authenticationEntryPoint" ref="loginEntryPoint"/>
    </beans:bean>

    <beans:bean id="logoutFilter" class="org.springframework.security.web.authentication.logout.LogoutFilter">
        <beans:property name="filterProcessesUrl" value="/logout"/>
        <beans:constructor-arg ref="logoutHandler"/>
        <beans:constructor-arg>
            <beans:list>
                <beans:bean class="org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler"/>
                <beans:ref bean="rememberMeServices"/>
            </beans:list>
        </beans:constructor-arg>
    </beans:bean>

    <beans:bean id="rememberMeAuthenticationFilter" class="org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter">
        <beans:property name="authenticationManager" ref="authenticationManager"/>
        <beans:property name="rememberMeServices" ref="rememberMeServices"/>
    </beans:bean>

    <beans:bean id="loginFormFilter" class="ru.test.auth.MyAuthenticationFilter">
        <beans:property name="authenticationManager" ref="authenticationManager"/>
        <beans:property name="rememberMeServices" ref="rememberMeServices"/>
        <beans:property name="authenticationSuccessHandler" ref="authenticationSuccessHandler"/>
        <beans:property name="authenticationFailureHandler" ref="authenticationFailureHandler"/>
    </beans:bean>

    <beans:bean id="noOpFilter" class="ru.test.user.security.NoOpFilter"/>

    <beans:bean id="authenticationManager" class="org.springframework.security.authentication.ProviderManager">
        <beans:property name="authenticationEventPublisher" ref="authenticationEventPublisher"/>
        <beans:property name="providers">
            <beans:list>
                <beans:ref bean="rememberMeAuthenticationProvider"/>
                <beans:ref bean="userDetailsBasedProvider"/>
            </beans:list>
        </beans:property>
    </beans:bean>

    <beans:bean id="authenticationEventPublisher" class="org.springframework.security.authentication.DefaultAuthenticationEventPublisher"/>

    <beans:bean id="userDetailsBasedProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
        <beans:property name="userDetailsService" ref="userDetailsService"/>
        <beans:property name="passwordEncoder" ref="passwordEncoder"/>
    </beans:bean>

    <beans:bean id="rememberMeAuthenticationProvider" class="org.springframework.security.authentication.RememberMeAuthenticationProvider">
        <beans:property name="key" value="mykey"/>
    </beans:bean>

   
    <beans:bean id="rememberMeServices" class="org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices">
        <beans:property name="userDetailsService" ref="userDetailsService"/>
        <beans:property name="key" value="mykey"/>
        <beans:property name="parameter" value="remember"/>
    </beans:bean>

    <beans:bean class="ru.test.user.security.LoginPageController">
        <beans:property name="redirectUrlResolver" ref="redirectUrlResolver"/>
    </beans:bean>

    <beans:bean id="loginEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
        <beans:property name="loginFormUrl" value="/login"/>
    </beans:bean>

    <beans:bean id="redirectUrlResolver" class="ru.test.user.security.DefaultRedirectUrlResolver">
        <beans:property name="defaultTargetUrl" value="/login"/>
    </beans:bean>


    <beans:bean id="authenticationSuccessHandler" class="ru.test.user.security.DefaultAuthenticationSuccessHandler">
        <beans:property name="redirectStrategy" ref="redirectStrategy"/>
        <beans:property name="redirectUrlResolver" ref="redirectUrlResolver"/>
    </beans:bean>

    <beans:bean id="authenticationFailureHandler" class="ru.test.user.security.DefaultAuthenticationFailureHandler">
        <beans:property name="redirectStrategy" ref="redirectStrategy"/>
        <beans:property name="redirectUrlResolver" ref="redirectUrlResolver"/>
    </beans:bean>


    <beans:bean id="logoutHandler" class="ru.test.user.security.DefaultLogoutHandler">
        <beans:property name="redirectStrategy" ref="redirectStrategy"/>
    </beans:bean>

    <beans:bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.Md5PasswordEncoder"/>

    <beans:bean id="redirectStrategy" class="ru.test.user.security.BasicRedirectStrategy">
        <beans:property name="performRedirect" value="true"/>
    </beans:bean>

    <beans:bean id="removeCurrentUserFilter" class="ru.test.user.security.RemoveCurrentUserFilter"/>
    
    
    <beans:bean class="ru.test.user.security.UserContextListener"/>
    <beans:bean id="onlineHolder" class="ru.test.user.implementation.online.DefaultOnlineHolder"/>
    
</beans:beans>




Что нужно - нужно добавить авторизацию через сторонний сервис :

т.е. где то , например в фильтре MyAuthenticationFilter - идет вызов стороннего сервиса - с набором параметров формы авторизации!

Внимание в ней три параметра !

login
username
password


идет запрос к этому сервису - он возвращает ок , если это валидный набор данных , если нет , то берем login password
и смотрим не является ли наш это пользователь .

если сервис вернул нам ок- то тут нужно создать каким то образом фейковый Authentication
Код: java
1.
2.
   UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password, getAuthorities());
                SecurityContextHolder.getContext().setAuthentication(authRequest);


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

при этом его нужно хранить где то ?

например в hashmap'е в памяти ...


Вопрос как такое организовать?

какие шаги делать и куда копать?

нудна ли своя реализация AuthenticationManager ? или есть готовая, как встроить все это в уже существующую систему?
...
Рейтинг: 0 / 0
10.09.2014, 17:00
    #38743314
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите организовать авторизацию через Spring Security
Atum1Что нужно - нужно добавить авторизацию через сторонний сервис :
SSO?
...
Рейтинг: 0 / 0
11.09.2014, 14:36
    #38744262
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите организовать авторизацию через Spring Security
Petro123,

SSO + Spring Security?

не совсем так .


Есть

MyAuthenticationFilter extends UsernamePasswordAuthenticationFilter

Есть кофиг , http://ru.wikibooks.org/wiki/Spring_Security/Ключевые_сервисы_Spring_Security

Если им верить то :
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<bean id="authenticationManager" class="org.springframework.security.authentication.ProviderManager">
  <property name="providers">
    <list>
      <ref local="daoAuthenticationProvider"/>
      <ref local="anonymousAuthenticationProvider"/>
      <ref local="ldapAuthenticationProvider"/>
    </list>
  </property>
</bean>



Можно указать несколько провайдеров и если авторизацию не прошла просто вернутся null

но как указать это для фильтра чтобы он их все по порядку прошел ???
...
Рейтинг: 0 / 0
11.09.2014, 15:21
    #38744324
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите организовать авторизацию через Spring Security
Atum1,
ну дак, вероятно спринг сам вызовет. Ты только делай реализацию интерфейсов как в статье. imho
...
Рейтинг: 0 / 0
15.09.2014, 12:25
    #38746681
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите организовать авторизацию через Spring Security
Petro123,

Да должен. но что то не так работает.
...
Рейтинг: 0 / 0
15.09.2014, 13:11
    #38746741
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите организовать авторизацию через Spring Security
Atum1,
приведи код...пример...реализацию
возможно банально невнимательность
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите организовать авторизацию через Spring Security / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]