按照 https://nightlies.apache.org/wicket/guide/9.x/single.html#_content_security_policy_csp 中的描述,所有 CSP 规则均通过应用程序设置(类
ContentSecurityPolicySettings
)进行管理。这意味着无法动态地将其他规则动态添加到内容安全设置类。例如,如果 Wicket 应用程序中的特定页面想要将其自己的特定 URL 添加到白名单中,则必须在应用程序的初始化阶段完成此操作。
有没有办法向每个组件或页面的 CSP 指令(类 CSPHeaderConfiguration
)列表贡献或添加规则?
这样做的首选方式是什么?
谢谢你。
您可以查找CSPHeaderConfiguration并修改它:
WebApplication.get().getCspSettings().getConfiguration().get(...).add(key, value)
设置是动态评估的,因此您可以随时添加/删除。
从文档中不清楚您可以使用哪个 Wicket 版本,但您可以使用
ContentSecurityPolicySettings.setProtectedFilter(...)
来排除页面设置全局 CSP。
修改 Wicket Web 应用程序类的
init()
:
@Override
protected void init() {
super.init();
getCspSettings().setProtectedFilter(requestHandler ->
requestHandler instanceof RenderPageRequestHandler
&& !PageWithOwnContentSecurityPolicy.class.equals(
((RenderPageRequestHandler) requestHandler).getPageClass()));
}
然后,您可以通过在页面类中覆盖
Content-Security-Policy
来添加
WebPage.setHeaders(...)
标头。