【问题标题】:Method design pattern - Enforce all methods to follow a pattern方法设计模式 - 强制所有方法遵循一个模式
【发布时间】:2021-02-01 05:30:34
【问题描述】:

我们正在开发一个网络应用程序,它应该只允许人们在获得授权的情况下执行某些操作。因此,控制器中的每个方法都需要检查他/她是否被授权执行特定操作(请注意权限是特定于操作的)。后端是java,前端是javascript。

如下所示,

    public class StudentDataInputController {

          public ModelAndView getDataInputView(HttpServletRequest request,HttpServletResponse response) {
              if (isAuthorized(request)) {
                  // Do something
              }
         }

         public String saveInput(HttpServletRequest request,HttpServletResponse response) {
             if (isAuthorized(request)) {
                 // Do something
             }
         }
  }

我想知道是否有任何设计模式可以为类中定义的每个操作强制执行此操作。一种解决方案是定义一个接口或抽象类,并为实现接口或扩展抽象的每个操作都有一个专用类。但是,它会产生很多类,而且,鉴于每个动作的返回类型各不相同,我认为这是不可行的。 任何建议都会有所帮助

更新:请注意权限是特定于操作的

【问题讨论】:

  • 如何将授权检查放入将请求分派给这些方法的 servlet(或检查对 servlet 的请求的 servlet 过滤器)。或者,您可以使用方面框架向具有特定签名的方法添加检查。
  • 你是专门找design-patterns的吗?否则,您想要实现的目标可以使用 @Before 之类的方面来完成。
  • 考虑使用 Spring Security 来保护你的 API
  • @tgdavies 权限特定于操作。例如:一个人可以查看数据,但不能编辑或添加数据。
  • 让调度程序检查它正在调用的方法,以获得描述要执行的权限检查的注释。如果没有注解,则不允许该操作。

标签: java spring design-patterns


【解决方案1】:

代理设计模式可能是您正在寻找的。准确搜索Protection Proxies

有很多方法可以使用这种模式。

一种方法是为每个服务类创建一个代理服务类。在控制器内部,您点击的是代理对象而不是真正的服务类。

在您的代理中,您可以决定是否要访问服务类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-29
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2017-12-23
    相关资源
    最近更新 更多