我有一个调用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();
谢谢!
答案 0 :(得分:0)
在您明确地将它们传递给EJB方法之前,无法访问服务层(即EJB中)中的某些HTTP请求特定属性。因此,如果您确实需要它,可以在EJB方法中添加额外的参数,例如List<String> headers
或Map<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层中。