2016-02-08 49 views
1

我想使用自定义注释标记类中的方法,该自定义注释将使用spring安全性控制授权决策。例如:在弹簧安全中使用自定义方法安全注释

@Role("ADMIN") 
public void accessControlledMethod(){} 

我明白,这意味着我不知需要注册我的自定义注释“角色”,以便它可以导致ConfigAttributes存在时的授权决定是由AccessDecisionManager制造。但是,我不明白如何使用spring安全注册我的自定义注释,以便识别它。

我在框架代码中看到了一个潜在的解决方案。有一个名为SecuredAnnotationSecurityMetadataSource的类,其文档说“为AnnotationMetadataExtractor注入自定义注释”。如果这是首选的方法,我不知道如何配置SecuredAnnotationSecurityMetadataSource或如何将AnnotationMetadataExtractor注入到其中。

+0

是否有一个理由,为什么你'使用自定义的替代,而不是由Spring Security提供的? –

+0

@XtremeBiker我的团队拥有一个现有的授权框架,它使用了与我们的应用程序相关的不同命名约定。我想在我们的方法安全注释中使用这些角色名称。方法文档清楚地表明这是以某种方式支持的,但我找不到任何关于它如何工作的信息。 – KyleM

回答

4

您可以在配置扩展GlobalMethodSecurityConfiguration

@EnableGlobalMethodSecurity 
@Configuration 
public class MyMethodSecurityConfig extends GlobalMethodSecurityConfiguration { 

    protected MethodSecurityMetadataSource customMethodSecurityMetadataSource() { 
     return SecuredAnnotationSecurityMetadataSource(...); 
    }  
} 

在XML中,你可以这样做:

<global-method-security metadata-source-ref="customMethodSecurityMetadataSource"> 
... 
</global-method-security> 
<bean id="customMethodSecurityMetadataSource" class="org.springframework.security.access.annotation.SecuredAnnotationSecurityMetadataSource"> 
... 
</bean> 

customMethodSecurityMetadataSource可以是任何的instanceof MethodSecurityMetadataSource

+0

感谢您的回复。我目前正在使用XML配置,是否有一个等效的XML配置? – KyleM

+0

我已更新我的答案 –

+0

谢谢,我不小心列出了错误的XSD并且它说metadata-source-ref不受支持。哎呦。 – KyleM