Hello,
Is there a configurable way in Struts 1.x so my action classses are only executed on HTTP 'POST' only.
I understand I can use request.getMethod()
within my action class and then do certain 'stuff' based on that.
Regards, Jonathan
Hello,
Is there a configurable way in Struts 1.x so my action classses are only executed on HTTP 'POST' only.
I understand I can use request.getMethod()
within my action class and then do certain 'stuff' based on that.
Regards, Jonathan
Here's and idea that is both some programmatic and config solution. You can create a custom ActionMapping...
public class YourPOSTRequiredActionMapping extends ActionMapping { }
... and use in your struts config for the mappings that are POST only.
<action path="/your/path" type="YourAction" className="YourPOSTRequiredActionMapping" />
Then, you could extend the struts RequestProcessor and override 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;
}
}
Make sure to configure your struts config to use YourRequestProcessor.
<controller processorClass="YourRequestProcessor" nocache="true" contentType="text/html; charset=UTF-8" locale="false" />
I based this on some old working code, but I haven't even compiled the sample code above.
One way of doing this without changing your application is to write a servlet Filter which rejects non-POST requests. You can then plug this filter into your web.xml file and configure its url-patterns to match your Struts controllers' paths.
You can use your web.xml
to define access permissions. This constraint prevents GET requests:
<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>