【发布时间】:2018-12-09 12:22:40
【问题描述】:
我不太理解具有保留策略的 Java 注释作为 RUNTIME。我要做的是创建一个名为 @Authorize 的注释并将其用于需要用户授权以执行某些操作的方法(此时用户已经通过身份验证)。 例如。我有一个带有 getOrder() 方法的订单服务。我只希望创建此订单的用户可以访问它。 `
public void getOrder(User user) {
//current code does something like this
if(order.getCreatedBy().equals(user)) {
//then proceed.
}
} `
我不想将此逻辑与业务逻辑混为一谈。相反,我希望有这样的东西- `
@Authorize
public void getOrder(User user) {
//business logic
}
` 有几种方法,但并非所有方法都需要这种授权。有人可以解释一下我怎样才能把这些碎片放在一起吗? 在这一点上我不明白的是 AnnotationProcessor 将如何帮助我,因为它在编译时发挥了它的魔力。据我了解,它将帮助我在编译时生成一些代码,但我不知道如何使用生成的代码。我经历了很多关于 AnnotationProcessors 的例子,但我仍然遗漏了一些东西。 到目前为止,这些链接帮助我了解了注释处理 -
http://hannesdorfmann.com/annotation-processing/annotationprocessing101 https://equaleyes.com/blog/2017/09/04/annotation-processing/
即使我使用反射,我应该将反射逻辑放在哪里?它会适得其反吗?
此时,我也对其他不涉及注释的解决方案持开放态度,但会帮助我分离出具有此类资源特定授权的业务逻辑。
【问题讨论】:
-
大家可以看看spring security:spring.io/projects/spring-security
-
我认为它更多的是基于角色的安全性。我正在寻找更细粒度的选择
-
基于活动或许可。正确的 ? .您仍然可以使用 spring security 来执行此操作。寻找 hasAuthority
-
我们使用 @PreAuthorize 保护数据,它允许通过以下方式进行访问控制:- hasRole,- hasAuthority - 轻松将权限映射到角色, - &&,||,() - 支持运算符, - 使用的原则(例如登录), - 自定义 bean - 具有返回布尔值的方法的类,检查经过身份验证的用户的资源可访问性。最常见的情况是用户具有特定权限 + 属于与资源相关的用户组(例如同一家公司)。 docs.spring.io/spring-security/site/docs/5.0.6.RELEASE/…
标签: java spring annotations authorization annotation-processing