[Seasar-user:15284] Re: CoolDeploy モードで@Componentアノテーションを使用した時の挙動
Yasuo Higa
[E-MAIL ADDRESS DELETED]
2008年 8月 6日 (水) 12:49:51 JST
ひがです。
> おはようございます。
>
> SAStrutsで、ログイン認証用のActionとActionFormを作り、
> ActionFromをセッションに設定しています。
>
Interceptor自身もセッションスコープで管理し、
http://s2container.seasar.org/2.4/ja/DIContainer.html#CustomizerConfigExample
のインスタンス属性がsingleton以外のインターセプタを利用する
を参考にしてください。
> 【ログイン用のActionFrom】
> @Component(instance = InstanceType.SESSION)
> public class LoginForm implements Serializable {
>
> private static final long serialVersionUID = 1L;
>
> public String userName;
> public String passWord;
> }
>
> ログイン用のActionでは、userName/passWordが未入力の場合
> エラーとしています。
>
> 【ログイン用Action】
> public class LoginAction {
>
> @Resource
> @ActionForm
> protected LoginForm loginForm;
>
> @Execute(validator = false)
> public String index() {
> return "login.jsp";
> }
>
> @Execute(validate = "validateLogin", input = "login.jsp")
> public String login() {
> System.out.println(loginForm.userName);
> System.out.println(loginForm.passWord);
> return "/employee?redirect=true";
> }
>
> public ActionErrors validateLogin() {
> ActionErrors errors = new ActionErrors();
>
> if (loginForm.userName.length() == 0) {
> errors.add("userName", new
> ActionMessage("errors.login.userName"));
> }
>
> if (loginForm.passWord.length() == 0) {
> errors.add("passWord", new
> ActionMessage("errors.login.passWord"));
> }
>
> return errors;
> }
> }
>
> ログイン成功後、別のAction(EmployeeAction)にリダイレクトしているのですが
> そのActionでは、独自に作ったLoginInterceptorをアスペクトしています。
>
> 【独自Interceptor】
> public class LoginInterceptor extends AbstractInterceptor {
> private static final long serialVersionUID = 1L;
>
> @ActionForm
> public LoginForm loginForm;
>
> public Object invoke(MethodInvocation invocation) throws Throwable {
> System.out.println("ログインしているか検証します。");
> System.out.println(loginForm.userName);
> System.out.println(loginForm.passWord);
> if ((loginForm.userName != null) || (loginForm.passWord != null)) {
> System.out.println("OKです");
> return invocation.proceed();
> }
> System.out.println("NGです");
> return "/login?redirect=true";
> }
> }
>
> 【リダイレクト先のアクション】
> @Aspect("loginInterceptor")
> public class EmployeeAction {
> @Execute(validator = false)
> public String index() {
> return "index.jsp";
> }
> }
>
>
> このような構成で、
> ・HotDeploy
> ・WarmDeploy
> では問題なくEmployeeActionへリダイレクトされるのですが、CoolDeploy時には
> LoginActionで取得したuserName/passWordがnullとなってしまいます。
>
> CoolDeployでは、サーバー起動時に全てのコンポーネントをdeployしているようですが
>
>
>
> これが原因なのでしょうか?
>
> また、何か解決策はありますでしょうか?
>
> 長くなりましたが、よろしくお願いします。
>
> 【環境】
> s2-framework-2.4.26.jar
> s2extension-2.4.26.jar
> s2-tiger-2.4.26
> sa-struts-1.0.3-rc1.jar
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
Seasar-user メーリングリストの案内