java - 在 Java 中使用注解进行授权检查

标签 java jakarta-ee web-applications annotations

我的类中有如下一些方法:

addOrder(long orderId){...}
updateOrder(long orderId, int qty){...}
deleteOrder(long orderId){...}

我想为它们添加授权行为。例如: 只有当您是订单的所有者时,您才能更新订单。 只有您是付费用户,您才可以添加订单。 只有当您的订单处于"new"状态时,您才可以删除订单。

最好的方法是什么? 我们可以使用注释来做到这一点吗?

@checkAuthorization
addOrder(long orderId){...}

@checkAuthorization
updateOrder(long orderId, int qty){...}

@checkAuthorization
deleteOrder(long orderId){...}

checkAuthorization 注释本身应该导致调用自定义方法,我将在其中检查是否允许此调用。

如果不是注释,还有其他最佳实践吗?
如果重要的话,此代码存在于 Web 应用程序 (Struts-1) 中。

最佳答案

可以使用面向方面的编程 (AOP) 执行此类检查。一个实际的实现是 Spring Security .您也可以查看 object permissions使用访问控制列表 (ACL) 或自定义实现。为此,您可以使用 Spring 表达式语言引用参数:

@PreAuthorize("#c.name == authentication.name")
public void doSomething(@P("c") Contact contact);

关于java - 在 Java 中使用注解进行授权检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25256670/

相关文章:

Java jax-ws 目录文件 : difference between PUBLIC and SYSTEM entries

java - Google App Engine : new java. util.Date() 有多可靠?

c# - 编码的 UI 测试 - 单击控件基于表行上的其他内容

jakarta-ee - 基于容器的EntityManager的动态@PersistenceContext unitName属性

java - 将网站从 tomcat 指向 Apache 服务器

java - 应该为特定的 Web 应用程序选择什么框架?

java - 使用空字符串初始化所有字符串成员

java - 直接遍历 JAR 文件中的文件夹

servlets - @WebInitParam 有什么意义?

javascript - 在 Spring Boot 应用程序中从 Angular JS 调用 Rest 服务时出错