2010-08-05 52 views
1

正如我在我的問題的標題中說的,我沒有成功配置Spring Security ... 我已經關注了兩篇由James Ward或Jettro撰寫的文章Coenradie,但我仍然沒有它![ACEGI]錯誤或沒有安全

首先,我試着讓所有這些工作在一個假項目中,並且運行良好,因爲我嘗試了「真正的」項目。 Spring Security的配置文件完全一樣,但真正的項目失敗了。

我的配置 在web.xml:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/config/applicationContext.xml</param-value> 
</context-param> 

... 

<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> 

    ... 

<servlet> 
    <servlet-name>Spring MVC Servlet Dispatcher</servlet-name> 
    <display-name>Spring MVC Servlet Dispatcher</display-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/config/webApplicationContext.xml</param- value> 
     </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

在applicationContext.xml中:

<security:global-method-security secured-annotations="enabled" jsr250-annotations="enabled" /> 

<security:http entry-point-ref="preAuthenticatedEntryPoint"> 
    <security:anonymous enabled="false"/> 
</security:http> 

<bean id="preAuthenticatedEntryPoint" class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint"/> 

<security:authentication-manager> 
    <security:authentication-provider> 
     <security:user-service> 
      <security:user name="arnaud" password="arnaud" authorities="ROLE_USER"/> 
     </security:user-service> 
    </security:authentication-provider> 
</security:authentication-manager> 

在webApplicationContext.xml CECI:

<flex:message-broker> 
    <flex:secured /> 
</flex:message-broker> 

而且在每一個bean服務:

<security:intercept-methods> 
    <security:protect method="*" access="ROLE_USER" /> 
</security:intercept-methods> 

首先,我嘗試用annotations @Secured(「ROLE_USER」)代替最後一段代碼,這沒有起作用,這就是爲什麼我使用了security:intercept-methods和security:protect tags。

在我的第一個虛擬項目中,當我啓動我的Flex應用程序(一個簡單的數據網格檢索產品列表)時,產品未加載並且我分派了一個FaultEvent,因此Spring Security可以工作。

在第二個項目中,真實的我在部署時發生錯誤,告訴我「*」(或者我試過的時候「findAll」)不是有效的方法名稱。

隨着

<security:protect method="com.blablabla.UserService.findAll" access="ROLE_USER" /> 

我不再有這個錯誤,我可以啓動我的Flex應用程序。

但是,當我啓動它時,我的所有用戶(是的,在第二個應用程序中檢索用戶,而不是產品)都加載到數據網格中!這意味着安全性根本不起作用。

這讓我瘋狂!

+0

您使用的是什麼版本的spring/spring-security? – ALOToverflow 2010-11-09 20:31:53

回答

0

我預計會在<security:http>元素中看到一些<security:intercept-url>元素。