2011-02-16 84 views
5

我想在我的管理會話bean,以確保方法的具體作用"ROLE_ADMIN"春季安全:方法不具有@PreAuthorize註解控制

配置(的applicationContext-security.xml文件):

<global-method-security pre-post-annotations="enabled" jsr250-annotations="enabled" secured-annotations="enabled"/> 
    <http auto-config="true" use-expressions="true"> 
     <intercept-url pattern="/**" access="isAuthenticated()"/> 
     <intercept-url pattern="/**" access="permitAll()"/> 
     <form-login 
     login-processing-url="/j_spring_security_check" 
     login-page="/login.jsf" 
     default-target-url="/main.jsf" 
     authentication-failure-url="/login.jsf" /> 

    <session-management> 
      <concurrency-control max-sessions="1" error-if-maximum-exceeded="false" /> 
    </session-management> 
    </http> 


    <authentication-manager alias="authenticationManager"> 
     <authentication-provider> 
      <user-service> 
       <user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" /> 
       <user name="user1" password="user1" authorities="ROLE_USER" /> 
      </user-service> 
     </authentication-provider> 
    </authentication-manager> 

    <beans:bean id="loggerListener" class="org.springframework.security.authentication.event.LoggerListener"/> 

bean的擔保方式:

@PreAuthorize("hasRole('ROLE_ADMIN')") 
    public String buy() { 
... 
    } 

當我登錄下user1anonym,然後點擊「購買」按鈕上的基於web頁面,它仍然重定向到下一頁。

我想到的是發生了一些拒絕訪問異常,它沒有。

回答

5

請記住,在你的applicationContext-security.xml文件啓用方法級別的安全性:

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

如果insted的您將使用前置或後置的註釋,使用:

<security:global-method-security pre-post-annotations="enabled"/> 

更多關於這一點,見:

http://forum.springsource.org/showthread.php?t=77862

注:標註s從jsr-250:

<sec:global-method-security jsr250-annotations="enabled" /> 
+1

實際嘗試過,它是一樣的。據我所知,安全註釋的立場,例如,對於@Secured註釋,我根本不使用。我使用預先註釋@PreAuthorize – sergionni 2011-02-16 21:51:41