如何使用@Context批注

什么是javax.ws.rs.core.context? 您学习了如何使用@Context批注从HttpHeaders类的注入实例中检索HTTP标头信息,以及如何从UriInfo实例中检索URI信息,例如URI参数和变量。

在本文中,您将学习如何将@Context批注与SecurityContextResourceContext类一起使用。

使用SecurityContext保护RESTful Web服务

为了保护RESTful端点,可以使用javax.ws.rs.core.SecurityContext接口,该接口提供对有关请求的安全性相关信息的访问。 SecurityContext实例使您可以访问以下与安全性有关的信息:

  • 用于保护资源的身份验证类型,例如CLIENT_CERT_AUTH, FORM_AUTH和BASIC_AUTH
  • 用发出请求的用户名填充的java.security.Principal实例
  • 如果请求是使用HTTPS发出的
  • 如果用户包含在给定角色中

要进入SecurityContext,您可以使用@Context批注将实例注入实例变量,setter方法或方法参数中。

让我们看一个检查当前用户是否处于来宾角色的示例。

@Path("/security-context")
public class SecurityContextResource {@GET@Produces(MediaType.APPLICATION_JSON)public Response sayHello(final @Context SecurityContext securityContext) {return Response.ok(securityContext.isUserInRole("guest")).build();}}

此代码段显示使用@Context批注将SecurityContext实例注入到securityContext参数中。 然后,它检查用户是否具有来宾角色,并将结果返回给调用方。 对http:// localhost:8080 / rest-server / security-context的调用将返回true或false,具体取决于用户对来宾角色的参与。 在这个简单的示例中,由于未配置任何角色,它应该返回false。

使用ResourceContext检索JAX-RS

javax.ws.rs.container.ResourseContext实例提供对其他资源类的实例的访问。 它有两种方法: getResource()方法用于检索资源或子资源,initResource ()用于初始化资源或子资源。

让我们创建一个示例,该示例检索将两个数字相加的资源。

首先,您需要计算器资源,该资源具有一个将两个值相加的资源方法。

@Path("/calculator")
public class CalculatorResource {@GET@Path("add")@Produces(MediaType.APPLICATION_JSON)public Integer add(@QueryParam("x") int x, @QueryParam("y") int y) {return x + y;}}

这是一个具有单个方法的简单资源类,该方法将两个查询参数加在一起并返回结果。 尽管可以通过URL http:// localhost:8080 / rest-server / calculator / add?x = 10&y = 50进行访问 ,但我们不会直接使用此资源,而是将其定位在另一个资源中方法并使用其添加方法。

@Path("/resource-context")
public class ResourceContextResource {@GET@Path("/add")@Produces(MediaType.APPLICATION_JSON)public Response get(final @Context ResourceContext resourceContext, final @Context UriInfo uriInfo) {final CalculatorResource calculatorResource = resourceContext.getResource(CalculatorResource.class);int x = Integer.valueOf(uriInfo.getQueryParameters().getFirst("x"));int y = Integer.valueOf(uriInfo.getQueryParameters().getFirst("y"));return Response.ok(calculatorResource.add(x, y)).build();}}

在此资源类中,有一个资源方法以ResourceContextUriInfo作为参数。 ResourceContext用于检索CalculatorResource.class ,而UriInfo实例用于检索两个查询参数。 然后,调用CalculatorResource类实例上的add()方法,并将两个参数传递给该方法。 方法的结果将被发送回调用方。

要激发此方法,请调用URL http:// localhost:8080 / rest-server / resource-context / add?x = 10&y = 50

接下来是什么?

这就是什么是javax.ws.rs.core.context?的第3部分的第2部分 您将学习如何使用@Context注释注入RequestConfiguration,ProvidersApplication类。

代码库

这个以及我所有文章的源代码都在readlearncode_articles Github存储库中。

翻译自: https://www.javacodegeeks.com/2017/08/javax-ws-rs-core-context-part-2.html

什么是javax.ws.rs.core.context? [ 第2部分 ]相关推荐

  1. 什么是javax.ws.rs.core.context? [ 第1部分 ]

    如何使用@Context批注 JAX-RS API提供了一种非常方便的机制,可以将各种有用的资源(例如HTTP标头)注入到端点中. @Context注释是一个通用注释,它注入以下对象的实例: Http ...

  2. 什么是javax.ws.rs.core.context? [第3部分]

    如何使用@Context批注 在什么是javax.ws.rs.core.context的第2部分中? 您学习了如何使用@Context批注从SecurityContext类的注入实例检索安全信息,以及 ...

  3. 什么是javax.ws.rs.core.context? [第5部分]

    如何使用@Context批注 在什么是javax.ws.rs.core.context的第4部分中? 您学习了如何使用@Context批注将HttpServletResponse和HttpServle ...

  4. 什么是javax.ws.rs.core.context? [第4部分]

    如何使用@Context批注 在什么是javax.ws.rs.core.context的第3部分中? 您学习了如何在请求和配置,提供程序和应用程序实例中使用@Context批注. 在本文中,您将学习如 ...

  5. Couldn‘t find grammar element for class javax.ws.rs.core.Response(没有解决)

    复现: $HADOOP_HOME/bin/yarn timelineserver 12月 22, 2020 3:21:49 下午 com.sun.jersey.server.wadl.generato ...

  6. Couldn‘t find grammar element for class javax.ws.rs.core.Response

    测试hive on tez,启动顺序如下: 启动hadoop hive --service metastore hiveserver2 starthis yarn timelineserver hiv ...

  7. 【registry】registry AbstractMethodError javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws

    1.概述 在 [registries]registrie rest-service idea 无法引入的背景下,以及 [registry]NoSuchFieldError: INCLUDE_ALL 以 ...

  8. javax maven项目缺少_Eclipse项目中的Maven:软件包javax.ws.rs不存在

    在Eclipse中,当我转到myProject->右键单击-> Run As-> Maven构建时,控制台中出现多个错误,概述某些软件包不存在,例如: javax.ws.rs doe ...

  9. flink启动yarn-session报错javax/ws/rs/ext/MessageBodyReader

    问题复现: /home/appleyuchi/bigdata/flink-1.10.1/bin/yarn-session.sh 报错如下: 2020-06-07 19:05:01,358 ERROR ...

最新文章

  1. linux学习之VNC远程控制(一)
  2. Javascript类的写法
  3. ABAP--Smart Forms多语言翻译
  4. leetcode题目整数颠倒
  5. python省略_在python中如何连接用省略号(…)分隔的连续行
  6. java线程安全例子_Java总结篇系列:Java多线程(三)
  7. 量子计算机怎么算有用,如何在量子计算机上实现经典计算
  8. php3d饼状图,php 生成饼图 三维饼图
  9. 机器学习笔记:t-SNE
  10. JS设计模式 - 工厂模式
  11. 山西台达plc可编程控制器_汇川PLC可编程控制器的功能特点
  12. wpf 直播视频播放器技术实现
  13. C++学习记录3:定义一个矩形类Rectangle
  14. tf.sigmoid
  15. 六、Prometheus+Grafana搭建监控系统
  16. 现代流行的平面设计风格有哪些?——黎乙丙
  17. 线程分离pthread_detach、pthread_attr_setdetachstate (attr, PTHREAD_CREATE_DETACHED);
  18. 蓝桥杯嵌入式LCD显示与LED显示问题
  19. GitHub里的MySQL基础架构自动化测试
  20. 【实习日记】Linux-VM15-Ubuntu18.04 + 运行selenium实现文件下载

热门文章

  1. JavaFX UI控件教程(十五)之Combo Box
  2. Hibernate注解(一)之持久化实体
  3. 通过实例理解 JDK8 的 CompletableFuture
  4. laravel允许所有网站进行跨域操作
  5. 如何用spring boot写一个注册页面
  6. 捡到东西说给钱才给东西?算不算敲诈勒索……
  7. struts+hibernate+oracle+easyui实现lazyout组件的简单案例——EmpDao层代码
  8. 计算机硬件统的构成,计算机硬件统的构成部件.ppt
  9. AQS的细节--自用,非正常教程
  10. groovy.run 脚本_Picocli 2.0:类固醇上的Groovy脚本