2

これを参考にして、Struts2 で REST のみの構成を作成しています。

https://cwiki.apache.org/confluence/display/WW/REST+Plugin

私の現在の問題はインターセプターにあります。アクションがヒットする前に実行するサンプル インターセプターを作成しました。

ここにあります:

public class AuthInterceptor extends AbstractInterceptor implements Interceptor
{
    public String intercept(ActionInvocation invocation) throws Exception {

        System.out.println("intercepting AuthInterceptor...");

        return invocation.invoke();
    }

    public void destroy() {
        System.out.println("Destroying AuthInterceptor...");
    }
    public void init() {
        System.out.println("Initializing AuthInterceptor...");
    }
}

これが私の struts.xml ファイルです。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
    <constant name="struts.devMode" value="true"/>

    <constant name="struts.mapper.class" value="rest" />

    <constant name="struts.convention.action.suffix" value="Controller"/>
    <constant name="struts.convention.action.mapAllMatches" value="true"/>
    <constant name="struts.convention.default.parent.package" value="rest-default"/>
    <constant name="struts.convention.package.locators" value="controllers"/>

    <package name="default" extends="struts-default">
        <interceptors>
            <interceptor name="myInterceptor" class="com.company.interceptors.AuthInterceptor"/>
            <interceptor-stack name="myStack">
                <interceptor-ref name="myInterceptor"/>
                <interceptor-ref name="defaultStack"/>
            </interceptor-stack>
        </interceptors>
        <default-interceptor-ref name="myStack"/>
    </package>
</struts>

ログ (catalina.out) には、インターセプターが初期化されたことが示されていますが、実際には何もインターセプトされませんでした。

Initializing AuthInterceptor...

どうやらマッパークラスdefault-interceptor-refではうまく動作しません。restこれは事実ですか?または私はここで何か間違っていますか?

4

2 に答える 2

2

これを変更する必要があります

<constant name="struts.convention.default.parent.package" value="default"/>
<package name="default" extends="rest-default">

アクション構成を作成するときの規約プラグインは、親パッケージで定義されたインターセプターを継承します。@ParentPackage親パッケージを定義するには、すべてのアクションの親パッケージを定義する上記の注釈または定数 を使用できます。

于 2014-12-27T20:49:48.173 に答える