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.
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.
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"
<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 angegebenefilter-name
einem Bean-Namen in Spring Stammanwendungskontext entspricht.
Tags und Links spring spring-security jboss7.x spring-ws