我是否必须在接口或类上放置@Secured注释?

时间:2017-10-30 08:21:48

标签: java spring spring-security

@Secured注释放在接口方法或实现接口的类中的方法上是否正确?对此有什么建议吗?

当我深入研究定义@Secured注释的类时,我可以看到它具有@Inherited注释集:

@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Secured {
    /**
     * Returns the list of security configuration attributes (e.g. ROLE_USER, ROLE_ADMIN).
     *
     * @return String[] The secure method attributes
     */
    public String[]value();
}

阅读this answer之后,我想我可以在界面上设置@Secured注释,以便在界面的所有实现上始终如一地强制执行授权。

1 个答案:

答案 0 :(得分:1)

在您提供的链接中,<custom-component class='parent'> <div v-if='someTruthyCondition'> <custom-component class='child'></custom-component> </div> </custom-component> 也是@Transactional。让我们分解它们的每一部分。

按照春天的developers recommended使用@Inherited注释和具体类。 您可以在界面中使用@Transactional注释或在界面内使用方法。如果您使用 @Transactional ,您可以认为这将按预期工作。未继承的注释是指如果您使用 interface-based-proxies ,那么可能的事务属性不会应用于该接口。因此,最终对象不能被事务属性覆盖或包装。

如果是这样,class-based-proxies注释为@Secured,那么这可以在接口及其实现类中使用。 从春天docs开始:

  

安全注释用于定义业务方法的安全配置属性列表。

例如:

@Inherited

所以在底线中,您可能有多个接口实现。因此,在界面中保留 @Secured({ "ROLE_USER" }) public void create(Contact contact); @Secured({ "ROLE_USER", "ROLE_ADMIN" }) public void update(Contact contact); @Secured({ "ROLE_ADMIN" }) public void delete(Contact contact); 注释是有道理的。