我可以在注释上使用 @PreAuthorize 吗?

在 Spring 中,我可以在注释中使用 ComponentDependsOn 之类的注释,如下所示:

@Target(ElementType.TYPE)
@Component
@DependsOn(CoreInitializerConfig.ROLE_INITIALIZER_ID)
public @interface WebComponent
{

}

它运作良好。但是当我尝试以相同的方式使用 PreAuthorize 时:
@Target(
{
    ElementType.TYPE, ElementType.METHOD
})
@Component
@PreAuthorize("hasAuthority('PERM_READ_SETTINGS')")
public @interface SettingsAuthorized
{

}

不起作用,我在 MVC Controller pojo 和 Bean 的方法中尝试过,但没有用,我不得不明确指出:
@Controller
@PreAuthorize("hasAuthority('PERM_READ_SETTINGS')")
public class SettingsController
{
    ...

}

最佳答案

我通过添加 @Retention(RetentionPolicy.RUNTIME) 解决了问题
还建议在最后的注解中加入 @Documented@Inherited ,结果如下:

@Target(
{
    ElementType.TYPE, ElementType.METHOD
})
@Component
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@PreAuthorize("hasAuthority('PERM_READ_SETTINGS')")
public @interface SettingsAuthorized
{

}

关于java - 我可以在自己的注释上使用 Spring Security @PreAuthorize 吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31388677/

10-11 07:21