2012-02-15 17 views
7

Mam już formularz logowania i podstawową autoryzację działającą obok siebie przy pomocy DelegatingAuthenticationEntryPoint.Obsługa podstawowego uwierzytelniania formularza i HTTP z różnymi źródłami

Staram się, aby użytkownicy przechodzili przez formularz logowania w celu uwierzytelnienia według kryteriów "A" i aby użytkownicy otrzymywali podstawowe żądania uwierzytelnienia w celu uwierzytelnienia według kryteriów "B".

Niektóre zasoby aplikacji są wyświetlane za pośrednictwem usługi REST (dostępnej za pośrednictwem podstawowego uwierzytelniania). Zamiast wprowadzania przez użytkowników własnych poświadczeń do wykonania wywołania usługi REST, mogą oni wprowadzać wygenerowane pary klucz/wartość wyłącznie do użytku z usługą REST, które później mogą zostać odwołane przez użytkownika lub administratora aplikacji.

Wolałbym dzielić się tak dużą ilością mojków, jak to możliwe, między dwiema metodami uwierzytelniania. Wiem, że będę potrzebować oddzielnych UserDetailsService s, ponieważ formularz logowania zapyta o moją tabelę users, a podstawowy auth prześle zapytanie do mojej tabeli service_credentials.

Jaki jest prawidłowy sposób na osiągnięcie tego rodzaju konfiguracji w Spring Security?

Odpowiedz

13

W zależności od aplikacji i czy używasz Wiosna Zabezpieczenia 3.1, może być najlepiej podzielić na wiele konfiguracji łańcuchów filtrów, każdy z osobnym Authentication Manager zdefiniowane:

<http pattern="/rest_api/**" create-session="stateless" 
    authentication-manager-ref="serviceCredsAuthMgr"> 
    <http-basic /> 
</http> 

<http authentication-manager-ref="mainAuthMgr"> 
    <form-login /> 
</http> 

<authentication-manager id="serviceCredsAuthMgr"> 
    <authentication-provider user-service-ref="serviceCredsUserDetailsSvc" /> 
</authentication-manager> 

<authentication-manager id="mainAuthMgr"> 
    <!-- whatever --> 
</authentication-manager> 

zamiast pattern atrybut można również użyć atrybutu request-matcher-ref do określenia instancji RequestMatcher, która będzie używana do mapowania żądań przychodzących do określonego łańcucha filtrów. Ma to bardzo prosty interfejs, ale pozwala dopasować w oparciu o coś innego niż ścieżka adresu URL, na przykład nagłówek Accept.

+0

Doskonała! Moje delegowanieAuthenticationEntryPoint używa niektórych RequestMatchers. –

1

Z SpringSecurity (3.2.3.RELEASE) praca wyśmienitą formę, jak również podstawowego uwierzytelniania:

<http pattern="/resources/**" security="none"/> 
<http pattern="/webjars/**" security="none"/> 

<http pattern="/rest/**" create-session="stateless" use-expressions="true"> 
    <intercept-url pattern="/**" access="isFullyAuthenticated()"/> 
    <http-basic /> 
</http> 

<http auto-config="true" use-expressions="true"> 
    <http-basic/> 
    <intercept-url pattern="/login" access="permitAll"/> 
    <intercept-url pattern="/loginfailed" access="permitAll"/> 
    <intercept-url pattern="/logout" access="permitAll"/> 

    <intercept-url pattern="/admin**" access="hasRole('ROLE_ADMIN')"/> 
    <intercept-url pattern="/**" access="isAuthenticated()"/> 
    <form-login login-page="/login" default-target-url="/" authentication-failure-url="/loginfailed"/> 
    <logout logout-success-url="/logout"/> 
    <remember-me user-service-ref="userService"/> 
</http> 

<authentication-manager> 
    <authentication-provider user-service-ref="userService"> 
<!-- 
     <jdbc-user-service data-source-ref="dataSource" 
          users-by-username-query="SELECT email, password, enabled FROM users WHERE email = ?" 
          authorities-by-username-query=" 
             SELECT u.email, r.name FROM users u, roles r WHERE u.id = r.user_id and u.email = ?"/> 
--> 
<!-- 
     <user-service> 
      <user name="[email protected]" password="password" authorities="ROLE_USER"/> 
      <user name="[email protected]" password="admin" authorities="ROLE_ADMIN"/> 
     </user-service> 
--> 
    </authentication-provider> 
</authentication-manager> 
+1

Naprawdę doceniam, że poświęciłeś czas, aby dodać te informacje dla osób, które odwiedziły ten wpis w nowszej wersji wiosennej wersji. –

Powiązane problemy