2012-09-24 25 views
1

我實現了一個自定義PermissionEvaluator並進行配置得到調用如下CustomPermissionEvaluator沒有在春3.1

<security:http access-denied-page="/" auto-config="true" use-expressions="true"> 
    <security:anonymous /> 
    <security:form-login always-use-default-target="false" default-target-url="/people/login/redirect" login-page="/people/login" login-processing-url="/people/login/submit" password-parameter="password" username-parameter="emailAddress" /> 
    <security:logout delete-cookies="true" invalidate-session="true" logout-success-url="/people/login/redirect" logout-url="/people/logout" /> 
</security:http> 

<security:authentication-manager erase-credentials="false"> 
    <security:authentication-provider ref="authenticationProvider" /> 
</security:authentication-manager> 

<security:global-method-security jsr250-annotations="enabled" pre-post-annotations="enabled" secured-annotations="enabled" > 
    <security:expression-handler ref="expressionHandler"/> 
</security:global-method-security> 


<bean id="expressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler"> 
    <property name="permissionEvaluator" ref="appPermissionEvaluator"/> 
</bean> 

<bean class="com.web.security.ApplicationPermissionEvaluator" id="appPermissionEvaluator" /> 

然後我申請hasPermissionCheck一個方法我ControllerClass之一,因爲如下

@PreAuthorize("hasPermission(#accountCode, 'AdministerPosition')") 
    @RequestMapping(method = RequestMethod.GET, value = "/cloud/{account}/position") 
    public String list(@PathVariable String account, @RequestParam(required = false, value = URLParameter.ACCOUNT_CODE) final String accountCode, final Model model) { 

} 

在這種情況下,我從來沒有在我的ApplicationPermissionEvaluator課程中獲得控制權。

我發現總是DenyAllPermissionEvaluator獲取我的情況與以下錯誤消息

DenyAllPermissionEvaluator - Denying user ****** permission 'AdministerPosition' 

請儘快諮詢我這個執行。我真的堅持這一點。

回答

0

得到這個工作的方式是配置在Spring MVC中的Context <security:global-method-security ..>,不是主要的方面

即在這裏mvc-servlet-context.xml

<servlet> 
    <servlet-name>appServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:META-INF/spring/mvc-servlet-context.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet>