Struts 1 Action令牌方法与Struts 2令牌拦截器一样工作,因为它将向您的会话添加一个令牌,并在表单提交时检查它,但它是一个更加人性化的过程。基本工作流程是:
>用户通过Struts Action(不直接到JSP)获取表单。 Struts Action将在转发到包含该表单的JSP之前调用saveToken(request)。
> JSP上的表单必须使用< html:form>标签。
>您的表单提交的操作将首先调用isTokenValid(request,true),如果返回false,您应该重定向回到第一个Action,并显示一条错误消息。这也会重置下一个请求的令牌。
这样做不仅可以防止重复的表单提交,而且任何脚本都必须打到第一个Struts Action并获得一个会话,然后才能提交到第二个Struts Action来提交表单。由于站点无法为其他站点设置会话,因此应该防止CSRF。
如果您通常将用户直接发送到JSP,请不要。相反,创建一个继承自ActionForward的新类,并将其设置为execute()方法:
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
saveToken(request);
return super.execute(mapping, form, request, response);
}