【问题标题】:GET submits instead of POST ones. TapestryGET 提交而不是 POST 提交。挂毯
【发布时间】:2013-10-08 11:43:39
【问题描述】:

我在 Tapestry 5.2 应用程序中遇到过这个问题:

表单要求请求方法是 POST 并且 t:formdata 查询参数有值。

在访问日志中,我发现有时会有来自不同用户使用 GET 方法提交的表单。不过,根据文档,Tapestry 5 使用 post-redirect-get 方案。此页面不允许匿名访问,所以它不能是机器人。所以我很沮丧,这可能是导致此类问题的原因。 请提出建议。

表单上有几个选择,由 Ajax 刷新。

编辑 2. 这样的 GET 请求来自用户而不是机器人,因为从该 ips 成功登录。

【问题讨论】:

  • 是否有任何可能执行 GET 请求的 ajax 操作?

标签: java get form-submit tapestry


【解决方案1】:

我猜测一下,它是一个网络爬虫,它正在爬取您的生产站点。您可能想customise tapestry's exception handling 向网络爬虫隐藏异常。

您通常可以通过用户代理请求标头检测网络爬虫。

请参阅here 了解已知机器人的列表。

【讨论】:

    【解决方案2】:

    我注意到form 组件具有以下内容:

    Object onAction(EventContext context) throws IOException {
       ...
       executeStoredActions();
       ...
    }
    
    private void executeStoredActions()
    {
        String[] values = request.getParameters(FORM_DATA);
    
        if (!request.getMethod().equals("POST") || values == null)
            throw new RuntimeException(messages.format("invalid-request", FORM_DATA));
        }
        ...
    }
    

    这意味着它将处理来自自身和任何嵌套组件的所有“动作”事件。我不认为你有一个嵌套组件触发“action”事件(例如actionlink)而不是处理/中止事件?这些事件会“冒泡”到表单处理程序并导致错误。

    请参阅here,了解事件可能“冒泡”的原因。

    【讨论】:

      【解决方案3】:

      这是一个老问题,但万一其他人在搜索中偶然发现它……您可以“装饰”Tapestry 的 RequestExceptionHandler 以捕获此异常并将用户重定向到他们可能想要的页面。

      有关实现此功能的代码,请参阅 Tapestry 特定错误常见问题解答:

      https://tapestry.apache.org/specific-errors-faq.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-12
        • 2021-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多