2014-12-27 5 views
2

작동하지 않습니다REST 만 - 기본 - 요격-REF 내가 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-refrest 매퍼 클래스와 잘 작동하지 않습니다. 이 경우인가요? 아니면 내가 여기서 뭔가 잘못하고있는거야?

답변

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>