首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java拦截器不拦截

java拦截器不拦截
EN

Stack Overflow用户
提问于 2015-08-27 20:42:36
回答 1查看 690关注 0票数 0

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

拦截器不适用于pong(),但神奇地适用于helloW()。当我为helloW()激活时,我可以修改和改写参数,抛出异常等等.但所有这些都不适用于pong()。在其他地方,我尝试使用无状态ejb --结果是相同的--而不是工作--甚至使用ejb程序集绑定部署描述符。为什么?

Rest:

代码语言:javascript
复制
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;
    }
}

拦截器本身:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<interceptors><class>main.Intercept</class></interceptors>

不是joy。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-27 21:22:59

免责声明:这只是猜测,因为我没有找到任何相关的支持文档,而且它还可能依赖于服务器的/JRE实现。

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

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

代码语言:javascript
复制
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那样被拦截。

我能想到的唯一解决办法是您已经做了什么:在另一个没有注释的方法中提取逻辑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32259065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档