如何在每个HTTP请求上自动添加参数?

时间:2012-12-12 10:45:05

标签: java javascript http share alfresco

由于某些特定原因,我需要在每个请求上自动添加或附加一个参数,当且仅当该参数自第一个请求起已存在于URL中。换句话说,如果我有网址/share/page/site/sample/documentlibrary?embedded,则对/share/page/site/sample/[whatever]的每个请求都必须包含嵌入参数以及原始请求可能添加的其他参数。

我正在与Alfresco Share(v4.2.b)合作,这意味着Web应用程序已经存在,尽管我可以执行自定义,但我有一些限制,因为我没有完全控制它。如果它是我从头开始创建的Web应用程序,那就不是问题了。根据我的限制,理想情况下解决方案应该尽可能少侵入。同时,如果它是基于JavaScript的解决方案,使用YUI而不是其他库是一个加号,但不是一个要求。

我一直在寻找一种方法,之后我想到了下一个可能的解决方案:

  1. 在每个页面卸载之前,通过将参数添加到URL来使用JavaScript。类似的东西:

        window.onbeforeunload = function(e) {
            // Add parameter to target URL
            };
    

    但我认为它不起作用,因为我正在阅读并根据我做的一些测试。似乎有一种安全限制(顺便说一句,这是有道理的。)

  2. 通过使用JavaScript更新每个链接(href)的<a/>属性,一旦页面加载完毕。例如,/share/page/site/sample/document-details?nodeRef=workspace://SpacesStore/089acea3-3b37-403d-9a8d-ae484ddd2ccb可以转换为/share/page/site/sample/document-details?nodeRef=workspace://SpacesStore/089acea3-3b37-403d-9a8d-ae484ddd2ccb&embedded。这个解决方案的问题是使用JavaScript触发的GET或POST和href都超出了范围...

  3. 使用任何网址重写技术或类似UrlRewriteFilter的图书馆(还没有时间对其进行测试,抱歉)。

  4. 创建一个Alfresco Share extension module,可以在模块或子组件评估程序的帮助下更改或更新每个请求。我不知道它是否适用于扩展模块,但我相信我会在任何地方阅读您可以对请求进行更改。

  5. 我必须添加(对于那些具有Alfresco Share知识的人),选项1,2和4将作为扩展模块实现。

    嗯,我希望我已经解释了我的问题。我非常感谢一些建议或可能的方法。无论如何,我会继续努力,我会提出任何更新。

3 个答案:

答案 0 :(得分:2)

  1. 如果它适用于每个请求,那么过滤器是最好的。分享已经像您所说的那样使用urlrewrite,所以更改默认值并将参数添加到其中。

  2. 如果您对共享有所了解,那么覆盖所包含的模板会很不错: 覆盖templates / org / alfresco / include中的alfresco-template.ftl。生成页面时始终会加载此模板。它还具有为Liferay Portlet定义的portletMode。

  3. 我们为嵌入文档库而做的是定义我们自己的文档库 分享自定义页面,所以我不需要'总是'存在arg任何 更多。

答案 1 :(得分:1)

如果使用mod_proxy通过Apache HTTPd代理连接,然后使用mod_rewrite重定向用户请求(如果它们尚未包含必需参数)呢?使用RewriteRule指令,您可以指定非常丰富的表达式,如果参数不存在,则会添加参数(docs

答案 2 :(得分:0)

没有使用Alfresco,但另一个选择是拥有自定义JSP标记。

让我们称之为customlink,然后当您在页面上呈现链接时,请使用此自定义jsp标记而不是<a>标记。

E.g

<mynamespace:customlink href="/somelink">My Content</mynamespace:customlink>

然后,自定义JSP标记可以负责检查请求中的查询字符串参数,如果存在,则将其附加到URL并使用查询字符串打印标记。

这样做的好处是不依赖于JS或将任何此类暴露给客户端。它还允许将来进一步扩展。