java - 仅 REST - default-interceptor-ref 不起作用

标签 java rest struts2 interceptorstack struts2-rest-plugin

我使用此作为引用在 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 映射器类很好地配合。是这样吗?或者我在这里做错了什么?

最佳答案

您需要更改此设置

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

约定插件在创建 Action 配置时会继承父包中定义的拦截器。要定义父包,您可以使用@ParentPackage注释或上面的常量来定义所有操作的父包。

关于java - 仅 REST - default-interceptor-ref 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27671101/

相关文章:

java - 使用 Java 写入文件不会在 Mac OSx 中保存该文件

java - Web 应用程序服务器过载

python - 非常非常简单的网络身份验证供个人使用

java - 如何在openshift上将自己用Java开发的REST api代码部署到云端?

jakarta-ee - Glassfish webapp 中的 EJB 注入(inject)

java - 为什么 java compile 上的并行执行会及时线性增长

java - Log4j2:如何打印日志中的所有对象参数

angular - "Http failure response for (unknown url): 0 Unknown Error" Angular

html - Struts2 文本区域调整大小

java - 如何在struts2中以最少的代码更改更改post请求以获取重定向?