【发布时间】:2016-01-29 22:50:36
【问题描述】:
我希望创建一个自定义注释,用于检查用户是否有权对某个产品 ID 进行操作。注释将放置在我的控制器中的方法上,该控制器在 Spring 托管应用程序中运行。
@ProductDemand(id = {productId})
@RequestMapping(value = "/product/{productID}", method = RequestMethod.PUT)
public Product update(Product toUpdate) {
User user = getUserFromHeaderValues();
}
在这种情况下,@ProductDemand 是我需要创建的自定义注释。如果用户无权对具有给定 ID 的产品进行操作,我想返回 403。
到目前为止,我有一个注释:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ProductDemand {
String productId;
}
我还有一项服务来授权这些值:
public class AuthorizationService {
public boolean authorize(UUID userUUID, String productID) {
//do auth
}
}
我想做的是能够将该注释放在任何方法上,并让它自动调用 AuthorizationService 中的授权方法。显然,在获取值和连接授权服务之间会有一些管道,但我目前不知道该怎么做。最好,我希望能够将所有这些都打包起来,并允许某人能够将其导入他们的项目中,并且能够通过添加注释以及在必要时添加一个 bean 来使用它。
我以前从未写过任何自定义注释,所以如果这没有意义,请告诉我。
谢谢, 菲尔
【问题讨论】:
-
你看过 Spring Security 吗?它提供了一个框架来实现您正在尝试做的事情。
-
请检查我的答案stackoverflow.com/a/13420500/241986,但老实说,三年后我不记得细节了 :-) 在那个答案中,我评估布尔变量 btw
标签: java spring annotations spring-annotations