2014-12-27 3 views
2

Я использую это в качестве эталона для создания REST только конфигурации на 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 картографа. Это так? или я делаю что-то неправильно здесь?

ответ

2

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

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

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

+0

игнорировании мой последний комментарий. Вы дали то, что мне нужно, чтобы изменить его. Я думал, вы имели в виду, что мне нужно изменить эту часть на что-то еще. Спасибо :) –

+0

Как только вы используете плагин конвенции вместе с плагином для отдыха, и даже если условный плагин предоставляет конфигурацию Zero XML, которую вы используете вместе с плагином для остальных, конфигурация по-прежнему может быть переопределена аннотациями. Вот что я пытался объяснить в последнем абзаце. –

0

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

<interceptor-stack name="myStack"> 
    <interceptor-ref name="myInterceptor"/> 
    <interceptor-ref name="restDefaultStack"/> 
</interceptor-stack>