2012-07-12 109 views
1

我有這樣的配置:春季安全始終是登錄頁面重定向

<bean id="customizedFilterSecurityInterceptor" 
     class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor"> 
    <property name="authenticationManager" ref="authenticationManager"/> 
    <property name="accessDecisionManager" ref="accesDecisionManager"/> 
    <property name="securityMetadataSource"> 
     <security:filter-security-metadata-source use-expressions="true" > 
      <security:intercept-url pattern="/css/**" access="permitAll" /> 
      <security:intercept-url pattern="/js/**" access="permitAll" /> 
      <security:intercept-url pattern="/externe*.do" access="permitAll" /> 
      <security:intercept-url pattern="/*.do" access="isAuthenticated() or isRememberMe()" /> 
     </security:filter-security-metadata-source> 
    </property> 
</bean> 

<bean id="loginUrlAuthenticationEntryPoint" 
    class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint"> 
    <property name="loginFormUrl"> 
      <value>/login.jsp</value> 
    </property> 
    <property name="forceHttps"> 
      <value>false</value> 
    </property> 
</bean> 

<bean id="externeServiceInterceptor" class="fr.global.commun.springSecurity.MySecurityInterceptor"> 
    <property name="authenticationManager" ref="authenticationManager"/> 
    ... 
    <property name="securityMetadataSource"> 
    <security:filter-security-metadata-source use-expressions="true" > 
     <security:intercept-url pattern="/externe*.do" access="isAuthenticated()" /> 
     </security:filter-security-metadata-source> 
    </property> 

的問題是,所有以/externe開始請求登錄頁面上的重定向,如果我刪除/*.do,我沒有訪問攔截器,但直接在struts action Externe *上。

+1

確定請求匹配'/ externe * .do'?你可以在DEBUG模式下運行spring安全(在log4j.properties中添加'log4j.logger.org.springframework.security = DEBUG')並在請求'externe * .do'後顯示輸出嗎? – Xaerxess 2012-07-12 13:05:33

+0

嗯,這是一個白癡的錯誤...我忘了補充: 安全:filter-chain pattern =「/ externe * .do」filters =「externeServiceInterceptor」/> – 2012-07-12 13:28:59

+1

在這樣的問題中,Spring Security總是首先進行DEBUG; ) – Xaerxess 2012-07-12 13:32:21

回答

0

此項目在XML文件是forgotter:

<bean id="springSecurityFilterChain" class="org.springframework.security.web.FilterChainProxy"> 
    <security:filter-chain-map path-type="ant"> 
     <security:filter-chain pattern="/externe*.do" filters="externeServiceInterceptor" /> 
    </security:filter-chain-map> 
</bean> 
+1

這很可能是一個非常糟糕的主意。你通過這個過濾器路由這些請求,而沒有任何其他的過濾器在鏈中(就我所知),這意味着即使你可以以某種方式進行身份驗證,你也可能泄漏線程本地安全上下文,從而有可能讓用戶作爲其他用戶訪問系統。 – 2012-07-13 18:01:11