gpt4 book ai didi

python - 如何在 Plone 中生成自定义 403 HTTP 响应(防止重定向)

转载 作者:行者123 更新时间:2023-12-01 04:48:48 25 4
gpt4 key购买 nike

未经授权的访问,Plone 默认情况下会提供登录表单的重定向。我需要防止某些子路径(即不是全局)出现这种情况,而是在(否则)正常的 Plone 身份验证和授权发生后,使用自定义(短)HTML 页面返回 403 Forbidden。

我研究了 ITraversable,但使用它在请求处理链中发生得太早 - 即。在授权之前等。

一种可能但尚未探索的方法是将自定义 View 注入(inject) URL 路径,该 View 对映射到剩余子路径的对象执行身份验证检查。因此可能存在一个 URL 类似于 http://myplone/somepath/customview/withcustom403 的请求。 ,其中:

  1. customview查看实现IPublishTraverse ,及其 publishTraverse()返回自身
  2. 接下来验证相同的 View ,在其 __call__ 中方法,访问withcustom403对象,即。通过调用 getSecurityManager().validate()
  3. 如果验证失败, View 会将响应设置为 403 并返回自定义 HTML

这行得通吗?或者在身份验证发生之后、Plone 调用 response.Unauthorized() 之前是否触发了某些事件(触发重定向),这将提供一个更干净的解决方案?

这适用于当前的 Plone 4.3.4。

最佳答案

您可以基于 acl_users/credentials_cookie_auth 插件创建一个新的 PAS Challenge 插件,并确保将其移至 acl_users 中 Challenge 插件的顶部。

或者可以使用猴子补丁来更改当前插件。仅出于演示目的,您可以编辑 Products/PluggableAuthService/plugins/CookieAuthHelper.py。在 unauthorized 方法中,您将看到以下几行:

url = '%s%scame_from=%s' % (url, sep, quote(came_from))
resp.redirect(url, lock=1)

在这些行之前添加两行,以防止未经授权访问其网址中包含 nogo 的任何资源:

if 'nogo' in came_from:
return 1

如果您创建自己的插件,如果您不想安装,请检查 Products/PlonePAS/Extensions/Install.py 中的 setupAuthPlugins 函数以获取安装方法手工完成。

关于python - 如何在 Plone 中生成自定义 403 HTTP 响应(防止重定向),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28850653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com