2

これは私のInterceptorコードです。私の目的は、すべての URL のセッションを維持することです。ログアウトが完了すると、ユーザーはどの URL にもアクセスできなくなります。

import java.util.Map;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class AuthenticationInterceptor implements Interceptor {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public void destroy() {
        // TODO Auto-generated method stub
        System.out.println("inside the destroy() of interceptor");
    }
    public void init() {
        // TODO Auto-generated method stub
        System.out.println("inside the init() of interceptor of new");
    }
    public String intercept(ActionInvocation ai) throws Exception {
        // TODO Auto-generated method stub
        System.out.println("inside the interceptor()......new");
        if(ai.getAction() instanceof LogoutAction){
            Map session = ai.getInvocationContext().getSession();
            if (session.get("user")!=null){
                System.out.println("inside logout of the session");
                return ai.invoke();
            }
            else{
                return "login";
            }
        }
        else
        return ai.invoke();

    }

これは私のログアウトアクションコードです:

 package com.uttara.reg;

    import java.util.Map;

    import org.apache.struts2.interceptor.SessionAware;

    import com.opensymphony.xwork2.ActionSupport;

    public class LogoutAction extends ActionSupport implements SessionAware {

        private Map session;
        public void setSession(Map s) {
            session = s;
        }

        @Override
        public String execute() throws Exception {
            System.out.println("inside execute() of LA");
            if(session.get("user")!=null){  
                session.remove("user");
            return "ridirect";
            }
            return "failure";
        }

    }

これは私の別のアクション ファイルです。ログインが完了すると、ユーザーはユーザーを登録します。私の質問は、ここでセッションを確認する方法です。

import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction extends ActionSupport implements SessionAware { 
private static final long serialVersionUID = 1L;
public RegisterAction() {
    System.out.println("inside the Register action const.");
}
private RegBean bean;
private Map session;
public RegBean getBean() {
    return bean;
}
public void setBean(RegBean bean) {
    this.bean = bean;
}
@Override
    public String execute() throws Exception {
     System.out.println("inside execute method");
     System.out.println(bean);
        Model m = new Model();
        String result = m.register(bean);
        if(result.equals(SUCCESS))
            return SUCCESS;
        else{
            addActionError(getText(result));
            return "failure";
        }
    }
@Override
    public void validate(){
     System.out.println("inside validate method");

    }
public void setSession(Map session) {
    // TODO Auto-generated method stub
    System.out.println("inside setSession");
    this.session = session;
}

}

4

2 に答える 2

0

認証されたユーザーがすべてのアプリケーション ページにアクセスする必要がある場合、ユーザーのセッションに属性loginがない場合は常に、ユーザーをページにリダイレクトする必要があります。user問題はあなたのif条件にあります。で何をしているのかわかりませんが、セッションから属性をLogoutAction削除してユーザーセッションを無効にする場合、ブロックは次のようになります。userif

public String intercept(ActionInvocation ai) throws Exception {
    // TODO Auto-generated method stub
    System.out.println("inside the interceptor()......new");
    Map session = ai.getInvocationContext().getSession();
    if ((session.get("user") != null) || 
        ((session.get("user") == null) && (ai.getAction() instanceof LoginAction)) {
        return ai.invoke();
    } else {
        return "login";
    }
}

このように、ユーザーが最初にログイン アクションを通過しなかった場合、選択の余地はありません。LogoutActionアクションは、アプリケーション内の他のアクションであり、ユーザー セッションに属性がある場合に呼び出すことができますuser

元のifステートメントでは、要求されたアクションがログアウトである場合にのみ、この条件をチェックしました。

于 2013-09-29T12:28:26.377 に答える