云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

负载均衡_oracle删除数据库_三重好礼

小七 141 0

Jenkins插件提示:操作中的访问控制和可见性

正如我们前面所讨论的,操作是插件用来向首页、项目页面、构建页面等添加更多信息的主要方式之一今天开始我想谈谈编写需要某种访问控制的受保护操作。根据您的需求,有几种方法可以做到这一点。在这方面,影响行为的因素有三个。一个是getIconFileName()方法。正如它的javadoc声明的那样,从这个方法返回null会将您的操作隐藏在HTML页面中。因此,如果您有一个操作,并且您不想向没有权限访问它的用户显示它,它可以是如下所示:public String getIconFileName(){返回詹金斯。盖斯().有权限(型号列表) ? "齿轮.png":空;}下一个是getUrlName()方法。此方法还允许null作为返回值。这听起来可能类似于getIconFileName(),但含义不同。当getIconFileName()返回null时,呈现的HTML页面将不显示链接,但如果有人知道URL,他们仍然可以访问它。但是当这个方法返回null时,就好像没有识别出这样的URL。所以使用下面这样的代码,如果没有权限的人请求它,他将得到404找不到(modulo a bug,我刚刚修复了1.443)。这有时是可取的,因为您不仅可以隐藏数据,还可以隐藏存在的事实。对于乔布斯,詹金斯会这样做- secret project/返回404 not found,not 401 forbidden,因此猜测项目名称不会帮助攻击者获得任何信息。公共字符串getUrlName(){返回詹金斯。盖斯().有权限(型号.列表) ? "模板":空;}但这有时是不可取的,因为用户不会被提示进行身份验证。如果有人用过期的会话点击链接,他会得到404NotFound,他需要足够聪明,知道这是因为他还没有登录,然后手动导航到登录页面并返回。为了避免这个问题,您将执行以下操作并一直公布URL。公共字符串getUrlName(){return"模板";}这就引出了第三部分,因为getUrlName()现在总是返回非null,这意味着您实际上没有检查正在访问的用户是否有权限这样做。为此,可以使用StaplerProxy。类MyAction实现了操作,StaplerProxy{...公共对象getTarget(){詹金斯。盖斯().检查权限(型号.列表);归还这个;}}发生的情况是,当某人请求的URL命中此操作(或下面的内容)时,我们将验证请求者是否具有权限。否则,这将启动身份验证,例如将用户重定向到登录页面,或使用预配置的身份提供程序启动OpenID协议。通常,此接口用于将UI处理延迟到另一个对象(类似于symlink的工作方式),但在本例中,我们返回此接口表示我们自己处理此请求,并且它足够智能,不会导致无限递归。我想经验法则是:(1)必须在getUrlName()或getTarget()中检查权限,否则没有访问控制;(2)使用getIconFileName()控制HTML页面的可见性;(3)使用getUrlName()来控制在访问被拒绝的情况下是否需要401或404。大介