2

ほとんどのアクションの前に実行され、メンバーがログインしているかどうかを確認する LoginInterceptor があります。そうである場合、そのページが表示されます。そうでない場合は、ログイン ページにリダイレクトされます。

ただし、インターセプターがすべての URL パラメーターを「ブロック」していることに気付きました。基本的に、アクションの前にインターセプターがある場合、このアクションの URL パラメーターはセッターに渡されません。

これは私のインターセプターです:

public class LoginInterceptor extends AbstractInterceptor {
    public String intercept(final ActionInvocation invocation) throws Exception {
        final String REDIR = "loginRedirect";
        AuthenticationService auth = new AuthenticationService();
        if (auth.isMemberLoggedIn()) {
            return invocation.invoke();
        } else {
            return REDIR;
        }
    }
}

invocation.invoke()アクションを呼び出すと思われますが、パラメーターはありません。

私はそれについて何ができますか?

アップデート:

AuthenticationService.isMemberLoggedIn()

public boolean isMemberLoggedIn() {
    Map<String, Object> session = ActionContext.getContext().getSession();
    String username = (String) session.get("username");
    if (username != null) {
        return true;
    } else {
        return false;
    }
}

struts.xml

<package name="global" extends="struts-default">
    <interceptors>
        <interceptor name="loginInterceptor" class="community.interceptor.LoginInterceptor" />
    </interceptors>
    <global-results>
        <result name="loginRedirect" type="redirect">/members/login</result>
    </global-results>
</package>

次に、各パッケージを拡張globalし、各アクションでそれらを呼び出します。

<interceptor-ref name="loginInterceptor" />
4

1 に答える 1

6

インターセプター スタックにインターセプターが含まれていない場合、paramsこの問題が発生します。次の行に沿ってスタックを構成する必要があります。

       <interceptors>
           <interceptor name="loginInterceptor" class="community.interceptor.LoginInterceptor" />
           <interceptor-stack name="customDefaultStack">
                <interceptor-ref name="i18n"/>
                <interceptor-ref name="loginInterceptor"/>
                <interceptor-ref name="prepare"/>
                <interceptor-ref name="modelDriven"/>
                <interceptor-ref name="fileUpload"/>
                <interceptor-ref name="checkbox"/>
                <interceptor-ref name="multiselect"/>
                <interceptor-ref name="params">
                    <param name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param>
                </interceptor-ref>
                <interceptor-ref name="conversionError"/>
                <interceptor-ref name="validation">
                    <param name="excludeMethods">input,back,cancel,browse</param>
                </interceptor-ref>
                <interceptor-ref name="workflow">
                    <param name="excludeMethods">input,back,cancel,browse</param>
                </interceptor-ref>
            </interceptor-stack>
        </interceptors>

        <default-interceptor-ref name="customDefaultStack"/>

または、すぐに使えるスタックを拡張できます。

       <interceptors>
           <interceptor name="loginInterceptor" class="community.interceptor.LoginInterceptor" />
           <interceptor-stack name="customDefaultStack">
                <interceptor-ref name="loginInterceptor"/>
                <interceptor-ref name="defaultStack"/>
            </interceptor-stack>
        </interceptors>

        <default-interceptor-ref name="customDefaultStack"/>
于 2012-10-29T19:41:22.507 に答える