我正在尝试将 JAX-RS 应用程序从 Jersey 迁移到 Apache CXF。我没有使用 Spring,所以我尝试通过扩展 javax.ws.rs.core.Application 来配置它。
我也实现了
public class RolesAllowedCXFFeature implements Feature {
@Override
public boolean configure(FeatureContext featureContext) {
SecureAnnotationsInterceptor interceptor = new SecureAnnotationsInterceptor();
featureContext.register(interceptor);
SimpleAuthorizingFilter f = new SimpleAuthorizingFilter();
f.setInterceptor(interceptor);
featureContext.register(f);
return true;
}
public static Object createAuthFilter() {
SimpleAuthorizingFilter f = new SimpleAuthorizingFilter();
f.setInterceptor(new SecureAnnotationsInterceptor());
return f;
}
}
并在前述
getSingletons()
的Application
方法中返回它。
问题是用@RolesAllowed注释的方法似乎不起作用。
在泽西岛足以从
new RolesAllowedDynamicFeature()
返回Application#getSingletons()
并且方法已得到保护。
从代码来看,我认为 SecureAnnotationsInterceptor 不会自动获取所有用 @Path 注释的类,因此您必须使用 SecureAnnotationsInterceptor#setSecuredObject 自己向拦截器注册它们。