Ho configurato la sicurezza di primavera utilizzando l'autenticazione di base e basata su modulo come da auto-config='true'
.Come posso disabilitare il login basato su form primaverile per endpoint RESTful?
Desidero che gli endpoint sotto /api/**
NON utilizzino la protezione basata su modulo. Altri endpoint esterni a /api/**
devono utilizzare l'accesso basato su modulo. Vorrei una risposta 401
inviata a qualsiasi chiamata per questi endpoint che non fornivano credenziali in /api/**
.
UPDATE: Grazie al commento di Luke Taylor di seguito ho trovato la seguente soluzione.
NOTA: questa tecnica può essere applicata solo a partire dalla sicurezza 3.1.
Prima di estrarre /api/**
. Non creiamo mai una sessione, ma usane una se disponibile, questa è gestita da create-session="never"
e dall'uso di <session-management/>
.
<http pattern="/api/**" create-session="never" use-expressions="true">
<http-basic />
<session-management />
<intercept-url pattern="/api/**" access="hasRole('API_ACCESS')"/>
</http>
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/" access="permitAll"/>
<intercept-url pattern="/**" access="isAuthenticated()"/>
</http>
Guarda qui http://www.baeldung.com/2011/10/31/securing-a-restful-web-service-with-spring-security-3-1-part-3/. In questo tutorial puoi trovare alcune risposte alle tue domande. – dimas
Vedere la mia risposta a [questa domanda] (http://stackoverflow.com/questions/9302795/handling-both-form-and-http-basic-authentication-with-different-sources) che essenzialmente sta chiedendo la stessa cosa. –
Ciao Luke, in teoria questo sembra quello che sto cercando e indagherà per applicarlo. Nell'avere più tag '' potrebbero accidentalmente gestire la richiesta? Forse posso usare SpEL per far corrispondere qualsiasi cosa diversa da '/ api'. Non ero a conoscenza del fatto che in spring 3.1 security ora consentono più tag '', questa è una buona cosa. –