rest – 使用拦截器和注入在JAX-RS中进行身份验证/授权
我正在使用WildFly 8在
JavaEE 7中开发一个新的应用程序.我正在使用JAX-RS为远程应用程序提供RESTful服务接口.
可以使用@Context注释在资源方法参数中注入类似HttpHeaders对象的东西.由于该对象基于请求参数(当然,HTTP标头),我提出了创建我自己的可注入User对象的想法,该对象是根据请求中存在的有效令牌创建的(类似于OAuth访问)令牌). 所以,我希望实现这样的目标: @Path("/resources") public class MyResource { @Path("/{id}") @GET public Response getById(@Context User user,@PathParam("id") long id) { ... } } 其中User是基于请求参数创建的可注入对象,例如可通过HttpHeaders对象访问的对象.当然,如果由于任何原因无法创建User对象,则提供程序也可以抛出异常并返回HTTP错误响应. 现在,我的问题是: >这是一个很好的设计吗?如果没有,我有哪些更好的选择? 谢谢 解决方法
在我看来,只要您不尝试使用此用户对象构建类似会话的内容,此方法就是有效的.
作为answered here你可以使用@Context和@Provider,但这不完全是你想要的. // Constructor of your JAX-RS Application public RestApplication(@Context Dispatcher dispatcher) { dispatcher.getDefaultContextObjects().put(UserProvider.class,new UserProvider()); } // a resource public Response getById(@Context UserProvider userProvider) { User user = userProvider.get(); } 解决问题的其他方法: >注册WebFilter,验证用户,包装ServletRequest并覆盖getUserPrincipal.然后,您可以从注入的HttpServletRequest访问UserPrincipal. 我把例子推到了github. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |