【问题标题】:java interceptor doesn't interceptjava拦截器不拦截
【发布时间】:2015-11-22 09:47:19
【问题描述】:

下面是一个简单的网络应用程序,配置为在 glassfish4 上运行的 Rest 服务。该应用程序本身可以工作,可以访问单个资源。

Interceptor 对 pong() 不起作用,但对 helloW() 却神奇地起作用。当我为 helloW() 激活时,我可以修改和覆盖参数,可以抛出异常等...但是这些都不适用于 pong()。在其他地方,我尝试使用无状态 ejb - 结果相同 - 无法正常工作 - 即使使用 ejb-jar 程序集绑定部署描述符。为什么?

休息:

package main;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("/service")
@javax.ejb.Stateless
public class Service {

    @GET
    @Produces("text/plain")
//    @javax.interceptor.Interceptors({Intercept.class})
    public String helloW(String ss){

        String msg = pong("QQ");

        return msg;
        //return ss;
    }

    @javax.interceptor.Interceptors({Intercept.class})
    public String pong(String m){
        String temp = m;
        return temp;
    }
}

拦截器本身:

package main;

@javax.interceptor.Interceptor
public class Intercept {

    @javax.interceptor.AroundInvoke
    Object qwe(javax.interceptor.InvocationContext ctx) throws Exception{

        ctx.setParameters(new Object[]{"intercepted attribute"});
        throw new Exception();
//        return ctx.proceed();
    }
}

是的,我确实尝试过 beans.xml:

<interceptors><class>main.Intercept</class></interceptors>

不开心。

【问题讨论】:

    标签: java jakarta-ee ejb interceptor


    【解决方案1】:

    免责声明:这是一个猜测,因为我没有找到任何关于此的支持文档,它也可能取决于服务器的/JRE 实现

    它不起作用,因为 @GET 注释方法 get 是通过使用 java 反射/内省技术调用的。这避免了框架拦截该调用,因为它直接在 JRE 内完成。

    要演示这一点,而不是直接调用“pong”,请尝试以下操作:

    try {
       String msg = (String) this.getClass().getDeclaredMethod("pong", String.class).invoke(this, ss);
      } catch (IllegalAccessException e) {
       e.printStackTrace();
      } catch (InvocationTargetException e) {
       e.printStackTrace();
      } catch (NoSuchMethodException e) {
       e.printStackTrace();
      }
    

    只需将String msg = pong("QQ"); 替换为示例中的该代码即可。

    你应该看到 pong 方法现在没有像 helloW 那样被拦截。

    我能想到的唯一解决方法是你已经做了:在另一个非注释方法中提取逻辑。

    【讨论】:

    • 谢谢。现在应该够了,我猜。我的参考资料是 oracle javaee tutorial 和 ejb 3 6th edition。你能推荐别的/更好的吗?
    • 如果您指的是问题本身,这是我最接近的参考:docs.jboss.org/jbossaop/docs/2.0.0.GA/docs/aspect-framework/…。关于 javaee 的其他参考资料,您拥有的是非常好的参考资料 :-)。
    猜你喜欢
    • 1970-01-01
    • 2013-06-25
    • 2018-08-09
    • 2023-03-13
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多