14

Ho implementato Oauth2 nella mia app di avvio a molla. Nella mia sicurezza-context.xml, ho queste righe -Sicurezza di primavera: accesso anonimo

<sec:intercept-url pattern="/trusted/**" access="isAnonymous()" /> 
<sec:intercept-url pattern="/**" access="isFullyAuthenticated()" /> 

voglio tutto sotto/fiducia di essere a disposizione senza autenticazione. Tuttavia, mi viene comunque richiesta l'autenticazione quando provo ad accedere a/risorse attendibili (queste sono risorse RESTful).

Mi sono perso qualcos'altro?

[Modifica:] Sto eseguendo questa app con un'istanza Tomcat 'fornita'.

+0

isAnonymous() implica che l'utente anonimo sia configurato. Vorrei fare qualcosa di simile a questo:

+0

Stackoverflow assegnerà premi a qualcuno, ma non ho avuto una risposta funzionante. – Raj

risposta

5

Hai solo bisogno di sostituire l'espressione access attributo di intercettazione di fiducia e dovrebbe funzionare:

<sec:intercept-url pattern="/trusted/**" filters="none" /> 
<sec:intercept-url pattern="/**" access="isFullyAuthenticated()" /> 

Anche se dalla primavera Security 3.1 ha deprecato filters, si dovrebbe utilizzare http tag per ottenere lo stesso effetto:

<http pattern="/trusted/**" security="none"/> 

<http auto-config='true'> 
    <intercept-url pattern="/**" access="isFullyAuthenticated()" /> 
    <form-login login-page='/login.jsp'/> 
</http> 

You can read more about this here.

+0

Ora ottengo org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: Un oggetto di autenticazione non è stato trovato nel SecurityContext – Raj

+1

Suoni come se si verificassero altri problemi con la configurazione di autenticazione. –

+0

Ho modellato dopo https://github.com/skate056/spring-security-oauth2-google conosci qualche altro esempio di lavoro con provider google goath e avvio primaverile? – Raj

0

La configurazione è errata. Ora immagina cosa sta succedendo, stai dicendo a Spring Security di consentire l'accesso anonimo a tutto sotto /trusted/** che va bene, ma poi dici di nuovo di restringere tutti gli accessi anonimi sotto /** - che è ogni percorso della tua applicazione, che ovviamente limita l'accesso a /trusted/** anche.

è necessario modificare la configurazione in qualcosa di simile a questo:

<sec:intercept-url pattern="/trusted/**" access="isAnonymous()" /> 
<sec:intercept-url pattern="/secure/**" access="isFullyAuthenticated()" /> 

e funzionerà.

+0

la tua risposta ha senso, ma poi ricevo questa eccezione -2015-08-17 20: 10: 30.760 ERRORE 18078 --- [io-8080-exec-10] osboot.context.web.ErrorPageFilter: Inoltro all'errore pagina dalla richiesta [/ monitor/123] a causa di un'eccezione [Un oggetto di autenticazione non è stato trovato nel SecurityContext] org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: un oggetto di autenticazione non è stato trovato nel SecurityContext – Raj

1
<http> 
<intercept-url pattern="/trusted/**" access="ROLE_USER,ROLE_GUEST" /> 
<intercept-url pattern="/messagePost.htm*" access="ROLE_USER" /> 
<intercept-url pattern="/messageDelete.htm*" access="ROLE_ADMIN" /> 
<anonymous username="guest" granted-authority="ROLE_GUEST" /> 
<remember-me /> 
</http> 

<anonymous username="guest" granted-authority="ROLE_GUEST" />

È possibile definire un ruolo come ROLE_GUEST e parlare come quello che il codice di cui sopra fa. Qualsiasi membro anonimo può accedere al modello di URL sotto ROLE_GUEST

Problemi correlati