2012-09-02 1 views
7

C'è un modo per "chiedere" sicurezza di primavera se la richiesta corrente è sicura? Perché anche se sono autenticato voglio rilevare se sono in un URL protetto sicuro o in una pagina anonima/pubblicaSpring Security - controlla se l'URL web è protetto/protetto

Grazie in anticipo!

+0

Si intende la richiesta che include il pattern di intercettazione-url o è autenticato con SSL? – HRgiger

+0

intendo modello intercetta-url e annotazione protetta. – user1641877

+0

Voglio verificare che la richiesta corrente in cui mi trovo sia anonima o che sia stata contrassegnata come protetta usando una configurazione o usando l'annotazione @Secured – user1641877

risposta

0

Penso che sia possibile utilizzare la propria implementazione per AccessDecisionVoter quindi semplicemente sovrascrivere il metodo Vote e confrontare l'url di intercettazione utilizzando il metodo filterInvocation.getRequestUrl();.

@Override 
public int vote(Authentication authentication, FilterInvocation filterInvocation, 
    Collection<ConfigAttribute> attributes) { 
    String requestUrl = filterInvocation.getRequestUrl(); 
    .... 
} 
0

Possiamo contrassegnarlo come un canale sicuro convertito in https: // url.

<intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY" requires-channel="https" /> 

Possiamo quindi utilizzare request.getScheme() per identificarlo. Ho utilizzato org.springframework.security.version 3.1.4.RELEASE

2

Spring Security fornisce JSP tag support per questo. Per esempio:

<sec:authorize url="/admin"> 

This content will only be visible to users who are authorized to access the "/admin" URL. 

</sec:authorize> 

Thymeleaf fornisce una sicurezza Dialetto primavera che ha il supporto diretto per checking URL authorization con Primavera di sicurezza. Per esempio:

<div sec:authorize-url="/admin"> 
    This will only be displayed if authenticated user can call the "/admin" URL. 
</div> 

Se la tecnologia non supporta l'esecuzione direttamente l'assegno, si può facilmente utilizzare il WebInvocationPrivilegeEvaluator (questo è l'oggetto che il taglib JSP e l'uso Thymeleaf). Ad esempio, è possibile @Autowire un'istanza di WebInvocationPrivilegeEvaluator e utilizzarlo direttamente. Ovviamente la sintassi varia a seconda di dove la si utilizza (ad esempio GSP, Freemarker, ecc.), Ma qui c'è un esempio in codice Java diretto.

@Autowired 
WebInvocationPrivilegeEvaluator webPrivs; 

public void useIt() { 
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); 

    boolean hasAdminAccess = webPrivs.isAllowed("/admin", authentication); 

    boolean hasAdminPostAccess = webPrivs.isAllowed(null, "/admin", "POST", authentication); 
} 
+0

Questo è giusto, ma funziona solo per i pattern URL definiti in spring-security.xml (non per i metodi del controller annotato @PreAuthorize) come ho notato qualche tempo fa. Puoi controllare questo http://stackoverflow.com/questions/27984557/is-it-possible-to-know-if-a-url-is-accesible-when-using-spring-mvc-and-spring-se –

+0

Come posso ottenere questo WebInvocationPrivilegeEvaluator quando non utilizzo Spring Context? – Damian