2016-07-19 22 views
2

Ich habe eine Spring-basierten Web-Anwendung auf Tomcat 7. Was ich tue, um es auszuführen, kopieren Sie die Archiv in das Webapps-Verzeichnis und starten Sie den Server, also meine Anwendung Wurzel ist verfügbar unter https://localhost:8443/application/.Spring Security Context ist null beim Zugriff auf Tomcat-Anwendung ohne Schrägstrich

Dann wollte ich Spring Sicherheit (3.2.4) zu ihm hinzufügen. Ich möchte die gesamte Anwendung sichern, nicht nur Teile davon. Die Frühlings-Sicherheitskonfiguration Ich habe:

<beans:beans xmlns="http://www.springframework.org/schema/security" 
      xmlns:beans="http://www.springframework.org/schema/beans" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans.xsd 
           http://www.springframework.org/schema/security 
           http://www.springframework.org/schema/security/spring-security-3.2.xsd"> 

    <http auto-config="true"> 
     <intercept-url pattern="/**" access="ROLE_USER" /> 
    </http> 

    <authentication-manager> 
     <authentication-provider> 
      <user-service> 
       <user name="admin" password="admin" authorities="ROLE_USER" /> 
      </user-service> 
     </authentication-provider> 
    </authentication-manager> 

</beans:beans> 

Und in web.xml:

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

Es ist eine grundlegende Konfiguration, die in den offiziellen Dokumenten und viele Tutorials zu finden ist. Alles funktioniert gut, wenn ich nicht authentifiziert bin Spring leitet mich auf seine Standard-Login-Seite um. Ich kann mich dann anmelden und kann auf die Anwendung zugreifen, bis die Sitzung abläuft oder ich zur Abmelde-URL navigiere.

Das Problem beginnt zu zeigen, wenn ich auf den Anwendungsstamm ohne den folgenden Schrägstrich zugreifen: https://localhost:8443/application.

Frühling nicht den Sicherheitskontext zu finden:

2016-07-19 17:48:36,650 DEBUG: security.web.FilterChainProxy -/at position 1 of 12 in additional filter chain; firing Filter: 'SecurityContextPersistenceFilter' 
2016-07-19 17:48:36,650 DEBUG: web.context.HttpSessionSecurityContextRepository - HttpSession returned null object for SPRING_SECURITY_CONTEXT 
2016-07-19 17:48:36,650 DEBUG: web.context.HttpSessionSecurityContextRepository - No SecurityContext was available from the HttpSession: [email protected] A new one will be created. 

ich dann bekommen umgeleitet zur Login-Seite, aber nachdem ich in ich ohne den Schrägstrich auf die ursprüngliche URL erhalten umgeleitet einzuloggen, Frühling nicht wieder, und ich sehe das Anmeldeformular erneut.

Weiß jemand, warum passiert das? Meine Konfiguration ist minimal, verwendet Standardeinstellungen. Der Anwendungsfall ist auch sehr einfach und es fühlt sich seltsam an, dass dies nicht wie erwartet funktioniert. Ich fühle, dass ich etwas Grundlegendes vermisse, entweder mit Spring oder Tomcat.

Jede Hilfe wird geschätzt, danke.

Antwort

1

Das Problem mit dem JSESSIONID Cookie-Pfad war - Tomcat automatisch auf /application/ gesetzt, so dass alle Anforderungen die Anwendung Wurzel ohne einen Schrägstrich wurden behandelt, als neuer Benutzer Zugriff auf welche Authentifizierung benötigt. Das Setzen des Cookie-Pfades auf /application löste das Problem für mich.

0

nur versuchen, diese

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

Das hat leider nicht geholfen, immer noch das gleiche Ergebnis. –

0
<http auto-config="true"> 
    <!-- my be this can`t match --> 
    <intercept-url pattern="/**" access="ROLE_USER" /> 
    <!-- add this for try --> 
    <intercept-url pattern="/" access="ROLE_USER" /> 
</http> 
+0

Bereits versucht, dass eine, es hilft nicht .. –

+0

versuchen, Muster neu anzuordnen, wie RahulArackal

+0

Während dieser Code die Frage beantworten kann, würde das Bereitstellen eines zusätzlichen Kontexts bezüglich * wie * und/oder * warum * das Problem lösen, den langfristigen Wert der Antwort verbessern. –