2

Spring Security を Spring MVC と統合しましたが、奇妙な動作が見られます。コントローラのすべてのメソッドは、同じリクエストに対して 2 回実行されます。私はそれをかなりグーグルで調べましたが、あまり役に立ちませんでした。私が見つけることができる最も近いものはこれですhttp://forum.springsource.org/archive/index.php/t-83158.html私は提案を試みましたが、成功しませんでした。

ここに私の web.xml があります:

<servlet>
     <servlet-name>appServlet</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <load-on-startup>0</load-on-startup>
</servlet>     
<servlet-mapping>
     <servlet-name>appServlet</servlet-name>
     <url-pattern>/</url-pattern>
</servlet-mapping>

<listener>
 <listener-class>org.springframework.web.context.ContextLoaderListener</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>/*</url-pattern>
</filter-mapping>

<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>
         /WEB-INF/spring/appServlet/security-app-context.xml            
         /WEB-INF/application-context.xml
    </param-value>
</context-param>

applicationcontext.xml の関連部分は次のとおりです。

 <context:component-scan base-package="com.*" />
  <context:spring-configured/>

 <mvc:annotation-driven />

 <context:property-placeholder location="classpath:/conf/myConfig.properties"   />

<mvc:resources mapping="/resources/**" location="/resources/" />

servlet-context.xml には、InternalResourceViewResolver のマッピングしかありません

security-context.xml は次のとおりです。

<http pattern="/resources/**" security="none"/>

    <http auto-config="false" create-session="stateless" entry-point-ref="loginUrlAuthenticationEntryPoint" >
        <intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
        <intercept-url pattern="/j_spring_security_check" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
        <intercept-url pattern="/accessdenied" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
        <intercept-url pattern="/login" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
        <intercept-url pattern="/logout" access="ROLE_USER"/>

    <custom-filter before="SECURITY_CONTEXT_FILTER" ref="cookieSecurityContextFilter" />
    <custom-filter position="LOGOUT_FILTER" ref="logoutfilter" />          
    <custom-filter position="FORM_LOGIN_FILTER" ref="authenticationFilter" />
    <custom-filter after="EXCEPTION_TRANSLATION_FILTER" ref="customExceptionFilter" />
    </http>


    <beans:bean id="logoutfilter" class="org.springframework.security.web.authentication.logout.LogoutFilter">
     <beans:constructor-arg value="/"/>
     <beans:constructor-arg ref="customLogouthandler"/>
    </beans:bean>

そして、フィルターのさらなるマッピング。コントローラーが2回呼び出される可能性がある構成で何か間違ったことをしていますか? ログを確認したところ、Bean は 1 回だけインスタンス化されています。助けてください。

前もって感謝します。

4

2 に答える 2

0

要素をservlet-context.xmlに移動してみ<mvc:..ます.applicationContext.xmlに配置すると、ディスパッチャーサーブレットが重複する可能性があります(ただし、Beanは一度しか作成されません)

@Controllerを使用して、applicationContext.xml を除くすべてのコンポーネントをスキャンします<context:exclude-filter..。同様に@Controller、次を使用して servlet-context.xml のみをスキャンします<context:include-filter..

于 2013-08-07T23:13:43.870 に答える