Possibile soluzione:
- Aggiungi intercettore URL
/admin
la richiede "ROLE_ADMIN"
- Configura istanza di
org.springframework.security.web.authentication.www.BasicAuthenticationFilter
per intercettare l'URL /admin
e autenticare l'utente come ROLE_ADMIN se fornisce le credenziali appropriate
Esempio di configurazione:
<security:intercept-url pattern="/admin" access="ROLE_ADMIN"/>
<bean id="basicAuthenticationEntryPoint"
class="org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint">
<property name="realmName"
value="WS realm"/>
</bean>
<bean id="basicAuthenticationProcessingFilter"
class="org.springframework.security.web.authentication.www.BasicAuthenticationFilter">
<property name="authenticationManager"
ref="authenticationManager"/>
<property name="authenticationEntryPoint"
ref="basicAuthenticationEntryPoint"/>
</bean>
Nota: l'implementazione predefinita di BasicAuthenticationFilter è un filtro passivo, ovvero cerca semplicemente un'intestazione di autenticazione di base nella richiesta e, se non è presente, non fa nulla. Se si desidera che il filtro per richiedere esplicitamente l'autenticazione di base da parte del cliente, è necessario estendere l'implementazione predefinita per iniziare a autenticazione del punto di entrata:
public class BasicAuthenticationFilter
extends org.springframework.security.web.authentication.www.BasicAuthenticationFilter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
final HttpServletRequest request = (HttpServletRequest) req;
final HttpServletResponse response = (HttpServletResponse) res;
String header = request.getHeader("Authorization");
if ((header != null) && header.startsWith("Basic ")) {
super.doFilter(req, res, chain);
} else {
getAuthenticationEntryPoint().commence(request, response, new AuthenticationCredentialsNotFoundException("Missing credentials"));
}
}
}
Inoltre, è necessario modificare il filtro da applicare ai /admin
URL solo - codificandolo nel metodo doFilter
o fornendo un bean wrapper appropriato.
fonte
2011-01-06 14:27:40
Sto scavando dappertutto cercando di capire come fare esattamente questo, grazie per averlo indicato con tanta chiarezza! –
Sicurezza di primavera 3.1.0 è stato ufficialmente rilasciato il 7/12/2011 – lrkwz
Sto facendo esattamente questo e se sono loggato nella sezione admin sono anche loggato nella sezione utente ma non autorizzato (ovviamente). Penso che questo sia dovuto al fatto che la sicurezza di primavera detiene l'autorizzazione in sessione sotto una chiave. Esiste un modo per configurare la sicurezza di primavera in uno scenario in cui è possibile accedere agli amministratori e alla sezione utente contemporaneamente con entità di autorizzazione diversa? –