将@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
注释,以便在界面的所有实现上始终如一地强制执行授权。
答案 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);
注释是有道理的。