【问题标题】:Custom Annotation for Authorization授权的自定义注解
【发布时间】: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


【解决方案1】:

使用 spring 方面,您可以将切入点与您的自定义注释一起使用。 然后你可以在之前、之后、周围等应用建议。这就是你想要的

这里是@AspectJ pointcut for all methods of a class with specific annotation的例子

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多