2012-09-02 11 views
7

Gibt es eine Möglichkeit, die Federsicherheit zu "fragen", wenn die aktuelle Anfrage sicher ist? Denn selbst wenn ich authentifiziert bin, möchte ich feststellen, ob ich mich in einer sicheren geschützten URL oder in einer anonymen/öffentlichen Seite befindet.Spring Security - überprüfen, ob die Web-URL sicher/geschützt ist

Vielen Dank im Voraus!

+0

Sie meine Anfrage einschließlich Intercept-URL-Muster oder es ist ssl authentifiziert? – HRgiger

+0

Ich meine Intercept-URL-Muster und sichere Annotation. – user1641877

+0

Ich möchte testen, ob die aktuelle Anfrage, in der ich mich befinde, entweder anonym ist oder als gesichert markiert wurde, entweder mit einer Config oder mit @Secured Annotation – user1641877

Antwort

0

Ich denke, Sie können Ihre eigene Implementierung für verwenden dann einfach überschreiben Vote Methode und vergleichen Intercept URL mit filterInvocation.getRequestUrl(); Methode.

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

Wir können markieren, ist es als sicherer Kanal so in https konvertiert: // URL.

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

Wir können dann request.getScheme() verwenden, um es zu identifizieren. Ich habe org.springframework.security.version verwendet. 3.1.4.RELEASE

2

Spring Security bietet JSP tag support für diese. Zum Beispiel:

<sec:authorize url="/admin"> 

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

</sec:authorize> 

Thymeleaf bietet Spring Security Dialect für checking URL authorization mit Spring Security direkte Unterstützung hat. Zum Beispiel:

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

Wenn Ihre Technologie nicht auf der Bühne den Scheck direkt unterstützt, können Sie bequem die WebInvocationPrivilegeEvaluator verwenden (dies ist das Objekt, das die JSP taglib und Thymeleaf Gebrauch). Zum Beispiel können Sie @Autowire eine Instanz von WebInvocationPrivilegeEvaluator und verwenden Sie es direkt. Offensichtlich hängt die Syntax davon ab, wo Sie sie verwenden (d. H. GSP, Freemarker usw.), aber hier ist ein Beispiel in reinem Java-Code.

@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

Das ist richtig, aber es funktioniert nur für URL-Muster, die in der Spring-security.xml definiert sind (nicht für annotierte Controller-Methoden von @ PreAuthorize), wie ich vor einiger Zeit bemerkt habe. Sie können dies http://stackoverflow.com/questions/27984557/is-it-possible-to-know-if-a-url-is-accesible-when-using-spring-mvc-and-spring-se –

+0

überprüfen Wie kann ich diesen WebInvocationPrivilegeEvaluator erhalten, wenn ich Spring Context nicht verwende? – Damian