2017-08-22 6 views
1

Beginnend mit Frühling 3.2 hinzufügen kann ich einfach diese xml zu meiner Sicherheit hinzu:Wie Spring Security HTTP-Response-Header

<security:headers> 
    <security:frame-options 
      policy="SAMEORIGIN" /> 
</security:headers> 

Aber in Frühling Version 3.1 ist nicht unterstützt, für diese jede Abhilfe ohne die Version upgraden zu müssen?

Dies ist die Dokumentation für Version 3.1:

http://docs.spring.io/spring-security/site/docs/3.1.3.RELEASE/reference/springsecurity.html

+0

Sie benutzerdefinierten Header in-Controller einstellen response.setHeader ("X-Frame-Optionen", "SAMEORIGIN"); –

Antwort

1

Ich glaube XFrameOptionsHeaderWriter implementiert Logik hinter dieser Konfiguration. Es wurde im Frühjahr 3.2 eingeführt, vor dieser Version gibt es nichts Ähnliches.

Wenn Sie diese selbst implementieren möchten, können Sie einen einfachen Filter verwenden:

public class XFrameOptionsHeaderFilter extends OncePerRequestFilter { 

    @Override 
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { 
     response.setHeader("X-Frame-Options", "SAMEORIGIN"); 
     filterChain.doFilter(request, response); 
    } 

} 

Sie benötigen eine Bohne für diese Klasse in Ihrem Anwendungskontext zu erstellen:

<bean id="xFrameOptionsHeaderFilter" class="your.package.XFrameOptionsHeaderFilter"/> 

Und dann registrieren die Filter in Ihrem web.xml:

<filter> 
    <filter-name>xFrameOptionsHeaderFilter</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>xFrameOptionsHeaderFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
+0

Tnx sehr nette Antwort, aber ich kann nicht funktionieren, ich sehe die Bean geladen ist, aber Methode wird nicht aufgerufen, wenn ich eine Anfrage stellen. irgendwelche Ideen was könnte fehlen? – Spring

+0

Vielleicht haben Sie die Bohne an der falschen Stelle deklariert? Sie sollten es in Ihren app-Kontext einfügen, der in 'contextConfigLocation' verwendet wird, nicht in Ihrem Servlet-Kontext. – chimmi