2014-05-19 11 views
7

La mia applicazione Web ha un sacco di risorse "normali" (pagine html ecc.) E anche alcune risorse REST che vengono chiamate da JavaScript dalle pagine html precedentemente citate .Configurare Spring Security per restituire 403 per gli URL REST e reindirizzare per accedere ad altri URL

Se è presente un timeout di sessione, l'utente viene reindirizzato al modulo di accesso. Questo è ottimo per le risorse "normali", ma non per le risorse REST. Ho solo bisogno di una risposta 403 in modo che il JavaScript possa prendere il sopravvento e chiedere all'utente di riautenticare.

Ci sono innumerevoli esempi sul web come configurare ciascuno di questi, ma non sono riuscito a trovare un esempio su come combinare i metodi. Tutti i miei URL API iniziano con "/ api /", quindi avrò bisogno del 403 per tutti quegli URL e del reindirizzamento per tutti gli URL rimanenti. Come faccio a configurarlo?

risposta

6

Mi ci è voluto un po 'di studio del codice sorgente di Spring per farlo funzionare. È possibile impostare un punto di ingresso di autenticazione come segue:

<bean id="authenticationEntryPoint" class="org.springframework.security.web.authentication.DelegatingAuthenticationEntryPoint"> 
    <!-- this is the configuration for /api/ URLs --> 
    <constructor-arg> 
     <map> 
      <entry> 
       <key> 
        <bean class="org.springframework.security.web.util.matcher.RegexRequestMatcher"> 
         <constructor-arg value="^/api/.*" /><!-- match URLs starting with "/api/" --> 
         <constructor-arg><null /></constructor-arg><!-- no matter what the HTTP method is --> 
        </bean> 
       </key> 
       <!-- if the key above has matched, send 403 response --> 
       <bean class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint" /> 
      </entry> 
     </map> 
    </constructor-arg> 

    <!-- and in the default case just redirect to login form --> 
    <property name="defaultEntryPoint"> 
     <bean class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint"> 
      <constructor-arg value="/spring_security_login" /> 
     </bean> 
    </property> 
</bean> 

Questo può quindi essere utilizzato nella configurazione Sping Sicurezza:

<http ... entry-point-ref="authenticationEntryPoint"> 
0

penso che si dovrebbe solo avere due differenti <http pattern="{...}" ...> entità, in quanto, ok, hai risolto il problema con il reindirizzamento, ma per quanto riguarda la protezione csrf? E altri problemi che non riesco a pensare in cima alla mia testa.

Problemi correlati