ダウンロード サンプルファイル (3.3 MB)
LoginInterceptor.java
LoginInterceptorのinterceptメソッドは、次のようになります。
public String intercept(ActionInvocation invocation) throws Exception {
// HttpServletRequest、HttpSessionの取得
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = ServletActionContext.getRequest().getSession();
// (1) ログインしていれば、次のインターセプターへ
if ( session.getAttribute("userid") != null &&
session.getAttribute("userid").equals("part4") ){
return invocation.invoke();
}
// (2) リクエストパラメーターのuseridとpasswordを取得
String userid = request.getParameter("userid");
String passwd = request.getParameter("password");
System.out.println(userid);
System.out.println(passwd);
if ( userid != null && passwd != null &&
userid.equals("part4") && passwd.equals("wings") ) {
// (3) 新たなセッションにuseridを設定する
ServletActionContext.getRequest().getSession(true).invalidate();
HttpSession newsession = ServletActionContext.getRequest().getSession(true);
newsession.setAttribute("userid", userid );
return "login-success";
}
return "login";
}
まず、今回のログイン処理は、ユーザーIDが「part4」でパスワードが「wings」であれば、認証OKとしています。実際のアプリケーションでは、ログイン情報をDBと照合するところですが、ここでは固定の文字列との比較としました。
(1)の処理は、セッションのuseridオブジェクトが「part4」であれば、認証済みと判断して、次のインターセプターへ遷移するようにしています。
(2)は、リクエストパラメーターを取得しています。このパラメータが設定されるときは、ログイン画面からSubmitされた直後ということになります。
(3)は、ログイン認証がOKの場合の処理です。これまでのセッションを破棄して新たなセッションを生成し、useridオブジェクトにユーザーIDを設定しています。最後に、結果コードとして、login-successを返します。
前述したとおり、インターセプターから直接結果コードを返すようにすると、Actionクラスの処理はスキップされて、次の処理に移ります。
login.jsp
login.jspは、次のようになります。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>ログイン</title> </head> <body> <s:form action="Login" > <s:textfield label="ユーザーID" name="userid" /> <s:password label="パスワード" name="password" /> <s:submit value="ログイン" /> </s:form> </body> </html>
<s:password>タグは、<input type="password">と同様です。なお、今回のログイン画面では、バリデーション処理は省略しました。
Login.java
Login.javaは、次のように、executeメソッドでsuccessを返しているだけです。
public class Login {
public String execute() throws Exception {
return "success";
}
}
実行結果
実行させると、前述したとおりの結果になるはずですが、さらにコンソールの表示にも注目してください。コンソールには、リクエストパラメータや、LoginInterceptor、Actionの結果コードが表示されています。

これは、最初のSimpleInterceptorと、LoginInterceptorで、System.out.printlnメソッドから出力している文字列です。
まとめ
Struts 2であらかじめ定義されたインターセプターについては、本稿では個別にとりあげませんでした。それらのうち、バリデーションのような重要な機能については、次回以降の解説で触れる予定です。
今回のインターセプターは、MVCモデルで言うと、Cのコントローラーにあたる部分でした。次回は、MVCのV、Viewについて解説することにしましょう。
参考資料
- Apache Struts
- Struts2を使ってみる
- ITの現場-Java,Flex,Strus2,Spring2,Hibernate3,Ajax,PHP
- 『Struts2入門』 川崎克巳 著、オンライン書籍、2007年10月
- 『Practical Apache Struts 2 Web 2.0 Projects』 Ian Roughley 著、Apress、2007年11月
この記事は参考になりましたか?
既に会員の方はを行ってください。
- 作りながら学ぶJavaアプリケーションフレームワーク連載記事一覧
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 高江 賢(タカエ ケン)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
