仅在Struts 1.x中将HTTP请求限制为“POST”

时间:2009-06-15 14:37:41

标签: java http struts

Struts 1.x中是否有可配置的方式,所以我的动作类只在HTTP'POST'上执行。

我知道我可以在我的动作类中使用request.getMethod()然后根据它做某些“东西”。

此致 乔纳森

4 个答案:

答案 0 :(得分:5)

您可以使用web.xml来定义访问权限。此约束可防止GET请求:

  <security-constraint>
    <web-resource-collection>
      <web-resource-name>struts action servlet</web-resource-name>
      <url-pattern>*.do</url-pattern>
      <http-method>GET</http-method>
    </web-resource-collection>
    <auth-constraint>
      <!-- no one! -->
    </auth-constraint>
  </security-constraint>

答案 1 :(得分:3)

这是和想法,这是一些程序化和配置解决方案。您可以创建自定义ActionMapping ...

public class YourPOSTRequiredActionMapping extends ActionMapping { }

...并在struts配置中使用仅限POST的映射。

<action path="/your/path" type="YourAction" className="YourPOSTRequiredActionMapping" />

然后,您可以扩展struts RequestProcessor并覆盖processMapping

public class YourRequestProcessor extends RequestProcessor {
    protected ActionMapping processMapping(HttpServletRequest request, HttpServletResponse response, String path) throws IOException {
        ActionMapping mapping = super.processMapping(request, response, path);
        if (mapping instanceof YourPOSTRequiredActionMapping) {
            if (!request.getMethod().equals("POST")) {
                mapping = null;
            }
        }
        return mapping;
    }
}

确保将struts配置配置为使用YourRequestProcessor。

<controller processorClass="YourRequestProcessor" nocache="true" contentType="text/html; charset=UTF-8" locale="false" />

我的基础是一些旧的工作代码,但我甚至没有编译上面的示例代码。

答案 2 :(得分:2)

在不更改应用程序的情况下执行此操作的一种方法是编写一个拒绝非POST请求的servlet Filter。然后,您可以将此过滤器插入到web.xml文件中,并配置其url-patterns以匹配Struts控制器的路径。

答案 3 :(得分:0)

麦克道尔的答案远非可以接受,除非你有一些具体的要求。您应该收到503 HTTP错误,您可以捕获该错误以向用户显示有意义的信息,或者只是将其留给当前Web配置中的实际错误管理。