Wie wird der Sicherheitskontext für die Sicherheit im untergeordneten Kontext angezeigt?

7

Ich versuche, einen Spring-Sicherheitskontext im Child-Kontext zu haben, damit ich die Sicherheit der Servlet-Kontextdatei per URL-Sicherheit haben kann.

Ich habe:

%Vor%

in web.xml, allgemeine Sicherheitskonfiguration in der Datei spring-security.xml und

%Vor%

auf der myapp-soap-servlet.xml. Es funktioniert nicht, aber schlägt mit

fehl %Vor%

Wenn ich jedoch <security:http> part in die Konfiguration des Spring-Security-Root-Kontextes verschiebe, funktioniert alles. Sollte es nicht so funktionieren, wie ich es versuche? Wie kann ich URL-basierte Sicherheit in meinem Kindkontext erhalten?

Ich habe auch versucht, die Kontextdateien zu einem zusammenzufassen, aber das gleiche Problem scheint zu passieren.

    
eis 04.06.2013, 14:18
quelle

2 Antworten

17

Der DelegatingFilterProxy sucht standardmäßig im Stamm ApplicationContext, was bedeutet, dass Sie standardmäßig Ihre <http> -Konfiguration dort ablegen müssen (es ist das, was den springSecurityFilterChain erzeugt).

Sie können jedoch angeben, dass DelegatingFilterProxy eine andere ApplicationContext verwendet, indem Sie das contextAttribute angeben, das verwendet werden soll. Aktualisieren Sie dazu Ihre web.xml wie unten gezeigt.

%Vor%

Ein ähnliches Beispiel mit AbstractSecurityWebApplicationInitializer von Spring Security 3.2 + ist unten zu sehen:

%Vor%

Dies funktioniert, weil es den Namen des ServletContext-Attributs ändert, das DelegatingFilterProxy verwendet, um ApplicationContext zu suchen. Anstatt den Standardwert zu verwenden, der den Stamm ApplicationContext entdeckt, verwendet er jetzt das Attribut, das Ihr MessageDispatcherServlet verwendet (und somit auf den Kindkontext verweist).

Beachten Sie, dass MessageDispatcherServlet (oder eine Unterklasse von FrameworkServlet wie DispatcherServlet ) die ApplicationContext in der ServletContext mit dem Attributnamen "org.springframework.web.servlet.FrameworkServlet.CONTEXT." + <servlet-name> speichert, wobei <servlet-name> der Name der. ist Servlet. In diesem Fall ist das Attribut, das konfiguriert werden muss, org.springframework.web.servlet.FrameworkServlet.CONTEXT.myapp-soap . Wenn Sie den Servlet-Namen from myapp-soap in spring-servlet geändert haben, verwenden Sie stattdessen org.springframework.web.servlet.FrameworkServlet.CONTEXT.spring-servlet .

PS Ich denke, das Thema sollte lauten: "Wie man den Sicherheitskontext für Kinder als Kindkontext erhält"

    
Rob Winch 04.06.2013, 18:51
quelle
2

<security:http> muss zum Hauptanwendungskontext statt zum Kindkontext (Servletkontext) wechseln, da dieses Sicherheitsnamensraumelement die springSecurityFilterChain -Bohne erstellt, die im Hauptkontext nach DelegatingFilterProxy gesucht wird. Wie sein Javadoc deutlich sagt:

  

web.xml enthält normalerweise eine DelegatingFilterProxy -Definition, wobei die angegebene filter-name einem Bean-Namen in Spring Stammanwendungskontext entspricht.

    
zagyi 04.06.2013 17:45
quelle