Только REST - default-interceptor-ref не работает

Я использую это как ссылку для создания конфигурации REST only на Struts2:

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 класс картографа. Это тот случай? или я тут что то не так делаю?

2 ответа

Решение

Вы должны изменить это

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

Плагин соглашения, когда создает конфигурацию действия, наследует перехватчики, определенные в родительском пакете. Для определения родительского пакета вы можете использовать @ParentPackage аннотация или константа выше, которая определяет родительский пакет для всех действий.

Предыдущий ответ корректен, но для реализации всех функций REST в перехватчике вы должны изменить свой стек перехватчиков на:

<interceptor-stack name="myStack">
    <interceptor-ref name="myInterceptor"/>
    <interceptor-ref name="restDefaultStack"/>
</interceptor-stack>
Другие вопросы по тегам