2

私は現在、Spring Security によって保護された Spring MVC アプリケーションを作成しています。ログインには基本的なフォーム認証が使用され、さらに構成を追加していないため、資格情報は に POST されhttp://www.localhost:8080/myWebApp/j_spring_security_checkます。

ここまでは順調ですが、Spring や Spring Security の影響を受けない 2 つ目のサーブレット (CometD) を導入しました。このために、servlet-mappingsSpring と Spring Security を/appそれぞれに対してマップ/app/*し、他のサーブレットを に対してマップするように を変更しようとしましcometd/*た。私web.xmlの見た目は次のとおりです。

<!-- Spring security -->
<listener>
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
<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>/app/*</url-pattern>
</filter-mapping>

<!-- Spring MVC -->
<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/app</url-pattern>
</servlet-mapping>

<!-- CometD -->
<servlet>
    <servlet-name>cometd</servlet-name>
    <servlet-class>org.cometd.server.CometdServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>cometd</servlet-name>
    <url-pattern>/cometd/*</url-pattern>
</servlet-mapping>

これに関する問題は、この変更の後、ログインできなくなることです。サーバーはリクエストのマッピングを見つけることができず、クライアントは私に伝えます NetworkError: 404 Not Found - http://localhost:8080/myWebApp/app/j_spring_security_check

このマッピングの何が問題になっていますか? ドキュメントで説明されているように、 Spring/とSpring Security を構成して、特定のマッピングのリクエストのみを処理し、特定のマッピングのリクエストを処理しないようにするにはどうすればよいですか?/*

よろしくお願いします!

ベスト、ルネ

4

1 に答える 1

1

springSecurityFilterChain を / にマップしたままにします。セキュリティ構成を変更します。

<http use-expressions="true">
    <intercept-url pattern="/cometd/**" access="permitAll" />
    <intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
</http>
于 2013-01-09T14:09:01.283 に答える