我正在使用本教程中描述的身份验证/授权机制来构建Rest服务:http :
//howtodoinjava.com/2013/06/26/jax-rs-resteasy-basic-authentication-and-
authorization-tutorial/
基本上,它使用PreProcessInterceptor接口扫描目标方法中的注释(来自javax.annotation.security包),这些注释描述访问该方法所需的角色。由于此处的身份验证器是拦截器,它可以取消目标方法的调用,并在需要时返回401(未授权)。
这里的问题是在当前的RestEasy版本(3.0.1)中不推荐使用org.jboss.resteasy.spi.interception.PreProcessInterceptor接口,而在使用标准JAX-
RS接口实现相同行为时遇到问题。
我正在使用javax.ws.rs.ext.ReaderInterceptor接口来拦截呼叫。但是服务器以某种方式从未调用它:拦截器只是被忽略。
我以与以前的PreProcessInterceptor相同的方式注册拦截器/资源,并使用相同的@Provider和@ServerInterceptor批注:
ServerApplication:
public class ServerApplication extends javax.ws.rs.core.Application {
private final HashSet<Object> singletons = new LinkedHashSet<Object>();
public ServerApplication() {
singletons.add(new SecurityInterceptor());
singletons.add( ... ); //add each of my rest resources
}
@Override
public Set<Class<?>> getClasses() {
HashSet<Class<?>> set = new HashSet<Class<?>>();
return set;
}
@Override
public Set<Object> getSingletons() {
return singletons;
}
}
安全拦截器:
@Provider
@ServerInterceptor
public class SecurityInterceptor implements javax.ws.rs.ext.ReaderInterceptor {
@Override
public Object aroundReadFrom(ReaderInterceptorContext context){
//code that is never called... so lonely here...
}
}
关于如何解决此问题的任何见解?
谢谢。
RESTEasy 3.xx符合JAX-RS 2.0规范。
您尝试执行的操作可以(可能更好)完成:
@Provider
public class SecurityInterceptor
implements javax.ws.rs.container.ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext){
if (not_authenticated){ requestContext.abortWith(response)};
}
}
因为ReaderInterceptor
仅当底层MessageBodyReader.readFrom
由标准JAX-
RS管道调用时才调用,而不是从应用程序代码中调用。
但是,未调用拦截器的原因可能是 @ServerInterceptor
注释,它是RESTEasy扩展。
规范在§6.5.2中指出,拦截器是全局注册的,除非@Provider
带有@NameBinding
注释,否则我不知道是否RESTEasy
可以处理@ServerInterceptor
未明确注册的,如RestEASY拦截器未调用中所示。
目前,我们通过向java命令添加来使用增量垃圾收集器。在JDK 8中,不推荐使用此开关。那么,它的替代品是什么呢<代码>-XX:UseG1GC? 背景:该应用程序有8GB的堆,并创建了许多短生命对象。我注意到它经常暂停几秒钟来收集垃圾。出于好奇,我添加了,发现暂停消失了,整体性能提高了约4倍。 不幸的是,我没有找到任何关于触发器的垃圾收集器类型的信息。有CMS(并发标记和扫描)和新的G1(垃圾优先
问题内容: 在教程中,我学会了使用。现在,我了解到,很多人对此表示反对。我已经尝试过,但随后它实际上将其发送到打印机。 那么我应该使用哪些替代方法,为什么不使用呢?w3schools和MDN都使用。 问题答案: 作为推荐的替代方法,您可以使用DOM操作直接查询节点元素并将其添加到DOM。
本文向大家介绍lodash pluck()方法的替代品是什么?,包括了lodash pluck()方法的替代品是什么?的使用技巧和注意事项,需要的朋友参考一下 Pluck已从lodash 4中删除。这是因为它的作用与映射相同。 作为替换,您可以通过以下方式使用map函数- 示例 输出结果 这将给出输出-
问题内容: 我正在尝试从旧版本的Hibernate(版本3)中更新一些代码。它使用了Hibernate 5中不再存在的两种接口方法。 Hibernate 5中的等效功能是什么? 问题答案: 您似乎正在寻找。例如, 您可能还需要检查TransactionStatus的文档,以查看交易状态的相对细粒度,因为您可能想要或需要比上述更多的包容性替代品。另外,请不要忽略的方法,您可能会发现有帮助。例如,
在他对问题“类型类,和之间的区别”的回答中,Edward Kmett说 此外,即使是的一个超类,您最终还是需要类,因为遵守 严格来说还不足以证明这一点 因此,声称某样东西是一个比声称它是更强。 很明显,任何不是单子的应用函子都会自动成为的一个例子,它不是,但爱德华·科米特的回答暗示存在一个单子,它是,而不是:它的和
问题内容: py2exe是否有替代品? 问题答案: cx_Freeze是跨平台的,并且具有相同的功能,或者您可以使用py2app,它仅在Mac上有效。