有没有办法在Java EE拦截器中访问HTTP头?

时间:2013-11-26 19:28:09

标签: http java-ee header ejb interceptor

我有一个调用EJB方法的JSP页面,我正在为EJB方法使用Java EE拦截器。因此拦截器的方法checkHeaders将在EJB方法之前执行
我的问题是:如何在拦截器方法中访问HTTP头?
我的应用程序在JBOSS 6.1中运行

// interceptor class


@AroundInvoke
public Object checkHeaders(InvocationContext invocationContext)
            throws Exception {

    // I need something here to access the HTTP headers:    
         invocationContext.getHTTPHeaders();
    .....
 //do something with the headers

//continue execution
invocationContext.proceed();

谢谢!

2 个答案:

答案 0 :(得分:0)

在您明确地将它们传递给EJB方法之前,无法访问服务层(即EJB中)中的某些HTTP请求特定属性。因此,如果您确实需要它,可以在EJB方法中添加额外的参数,例如List<String> headersMap<String, String> headers,并在拦截器中读取参数值:

      public Object checkHeaders(InvocationContext context) throws
        Exception{

          if (ctx.getMethod().getName().equals("yourTargetMethod")) {
              // assume your 'headers' parameter is first method param
              List<String> headers = (List<String>) ctx.getParameters()[0]);
          }
      }

答案 1 :(得分:0)

您无法从EJB拦截器访问HTTP标头,因为EJB容器独立于Web层。您可以将标头传递给EJB方法调用,并将其作为业务逻辑的一部分进行检查,或者在JSP / Web层中执行检查。我会选择后者,因为您不会将Web问题/依赖关系泄漏到您的业务/ EJB层中。