2012-09-02 13 views
7

¿Hay alguna forma de "solicitar" seguridad de primavera si la solicitud actual es segura? Porque incluso si estoy autenticado, quiero detectar si estoy en una URL segura protegida o en una página anónima/públicaSeguridad de primavera: compruebe si la URL de la web es segura/protegida

¡Gracias de antemano!

+0

¿te refieres a la solicitud incluyendo el patrón de intercepción de url o está autenticado en ssl? – HRgiger

+0

quiero decir patrón de intercepción de url y anotación segura. – user1641877

+0

Quiero probar que la solicitud actual en la que me encuentro, sea anónima o se haya marcado como segura utilizando una configuración o utilizando la anotación @Secured – user1641877

Respuesta

0

Creo que puede usar su propia implementación para AccessDecisionVoter y luego simplemente anular el método Vote y comparar el URL de intercepción usando el método filterInvocation.getRequestUrl();.

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

Podemos marcarlo como un canal seguro convertido a https: // url.

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

A continuación, podemos utilizar request.getScheme() para identificarlo. Utilicé org.springframework.security.version 3.1.4.RELEASE

2

Spring Security proporciona JSP tag support para esto. Por ejemplo:

<sec:authorize url="/admin"> 

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

</sec:authorize> 

thymeleaf proporciona una seguridad dialecto primavera que tiene el apoyo directo a checking URL authorization con Spring Security. Por ejemplo:

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

Si su tecnología no es compatible con la realización de la verificación directa, puede utilizar simplemente la WebInvocationPrivilegeEvaluator (este es el objeto de que el taglib JSP y el uso thymeleaf). Por ejemplo, puede @Autowire una instancia de WebInvocationPrivilegeEvaluator y usarla directamente. Obviamente, la sintaxis variará dependiendo de dónde la use (es decir, GSP, Freemarker, etc.), pero aquí hay un ejemplo en código Java directo.

@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

Esto es correcto, pero solo funciona para los patrones de URL definidos en spring-security.xml (no para @PreAuthorize métodos de controlador anotados) como noté hace algún tiempo. Puede consultar este http://stackoverflow.com/questions/27984557/is-it-possible-to-know-if-a-url-is-accesible-when-using-spring-mvc-and-spring-se –

+0

¿Cómo puedo obtener este WebInvocationPrivilegeEvaluator cuando no uso Spring Context? – Damian

Cuestiones relacionadas