我们在JAX-RS Web服务上使用java ee拦截器。
我们使用此注释拦截:
@InterceptorBinding
@Inherited
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface FunctionalityAuthorization {
//using non binding to allow interception of all calls with the annotation
//not only if the value matches
@Nonbinding public String value() default "";
}
拦截器的声明如下:
@Interceptor
@FunctionalityAuthorization
public class FunctionalityAuthorizationInterceptor {
@AroundInvoke
public Object intercept(InvocationContext context) throws Exception {
然后我们对REST方法进行了注释:
@GET
@Produces("application/json")
@FunctionalityAuthorization(Functionalities.TMSALERTS_ALERTS_VIEW)
public AlertDto[] get() {
我们当然也在beans.xml
文件中指定了拦截器。
拦截器检查用户是否有权访问正在调用的REST服务。
现在我们有一个令人震惊的情况:我们意识到拦截器没有在我们的登台服务器上工作!但是他们在我们的开发人员机器上工作,尽管我们尝试将开发人员机器配置为尽可能接近登台服务器(安装了相同的其他应用程序集,我们可以找到的所有设置,同一数据库的备份,独立的Glassfish安装相同的版本,与服务器上的WAR文件相同...),我们无法在开发人员机器上重现该问题。
知道什么可以解释行为上的差异吗?这是Glassfish 3.1.2.2。