Struts 1.x中是否有可配置的方式,所以我的动作类只在HTTP'POST'上执行。
我知道我可以在我的动作类中使用request.getMethod()
然后根据它做某些“东西”。
此致 乔纳森
答案 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)