Struts 1アクショントークンメソッドは、セッションにトークンを追加してフォーム送信時にチェックするという点でStruts 2トークンインターセプターと同じように機能しますが、はるかに手動のプロセスです。基本的なワークフローは次のとおりです。
- ユーザーは、Strutsアクションを介してフォームにアクセスします(JSPに直接アクセスするのではありません)。Strutsアクション
saveToken(request)
は、フォームを含むJSPに転送する前に呼び出します。
- JSPのフォームは
<html:form>
タグを使用する必要があります。
- フォームが送信するアクションは最初にを呼び出します。
isTokenValid(request, true)
最初のアクションが返される場合は、エラーメッセージを表示して最初のアクションにリダイレクトする必要がありますfalse
。これにより、次のリクエストのトークンもリセットされます。
これを行うと、フォームの重複送信を防ぐだけでなく、スクリプトを2番目のStrutsアクションに送信してフォームを送信する前に、スクリプトは最初のStrutsアクションを実行してセッションを取得する必要があります。サイトは別のサイトのセッションを設定できないため、これにより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);
}