powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите организовать авторизацию через Spring Security
6 сообщений из 6, страница 1 из 1
Помогите организовать авторизацию через Spring Security
    #38743303
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день !

Есть система с классической авторизацией 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
Помогите организовать авторизацию через Spring Security
    #38743314
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Что нужно - нужно добавить авторизацию через сторонний сервис :
SSO?
...
Рейтинг: 0 / 0
Помогите организовать авторизацию через Spring Security
    #38744262
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Помогите организовать авторизацию через Spring Security
    #38744324
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
ну дак, вероятно спринг сам вызовет. Ты только делай реализацию интерфейсов как в статье. imho
...
Рейтинг: 0 / 0
Помогите организовать авторизацию через Spring Security
    #38746681
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

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


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