Struts2 入門 LoginInterceptor 実装サンプル
- Interceptor の 実装サンプルとして、Login認証を interceptor として実装
- ここでは、convention plugin を導入前提として書いている
サンプル処理の流れ
1. ユーザーによる http request
2. struts.xml の設定に従い、request 先の action に Login Interceptor の対象か否かチェック
3. 2で対象の場合、Login Interceptor が intercept して Login認証を実施
4. 最初は確実にエラーなので、Login画面(login.jsp)に遷移
5. Login画面で ID/PW を入力
6. Login interceptor が 処理を横取りして認証
7. 認証が正しければ、LoginActionを実行
8. LoginAction から Main.Action にリダイレクト
<struts> <package name="default" extends="convention-default"> <interceptors> <interceptor name="login" class="foo.interceptors.LoginInterceptor" /> <interceptor-stack name="myStack"> <interceptor-ref name="login"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <default-interceptor-ref name="myStack"/> </package> </struts>
- interceptor の対象とする action クラスに packageを適応する
@ParentPackage("default") @Result(name="login", location="login.jsp") public class Basic extends ActionSupport { }
public class LoginInterceptor extends AbstractInterceptor { public String intercept(ActionInvocation invocation) throws Exception { if(isLogin()){ return invocation.invoke(); } else { return "login"; } } private boolean isLogin(){ // login validation codes here } }
- login.jsp
<s:form action="login"> <s:textfield key="id"/> <s:password key="password" /> <s:submit/> </s:form>
- Login.java
@Result(name="main", location="main.action", type="redirect") public class Login extends Basic{ public String execute() throws Exception { return "main"; } }
課題
- interface に認証ロジックがあるのが少し気持ち悪い
- おそらくLoginのActionファイルに書き換え可能