我将此作为参考在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
映射器类配合使用。是这样的吗?或者我在这里做错了什么?
答案 0 :(得分:2)
您需要更改此
<constant name="struts.convention.default.parent.package" value="default"/>
<package name="default" extends="rest-default">
创建操作配置时的约定插件会继承父包中定义的拦截器。要定义父包,您可以使用@ParentPackage
注释或上面的常量来定义所有操作的父包。
答案 1 :(得分:1)
之前的respuest是正确的但是为了实现拦截器中的所有REST功能,您必须将交换器堆栈更改为:
<interceptor-stack name="myStack">
<interceptor-ref name="myInterceptor"/>
<interceptor-ref name="restDefaultStack"/>
</interceptor-stack>