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

如何使用@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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【题解】Luogu P2347 砝码称重

正经DP题解 一道非常好的背包练手题( sto(注:原思路来源 SLYZ_0120 的题解)orz 开始这道题 1.输入六个数,存进数组中 2.初始化 f 数组为0。 f [ i ] 表示重量为 i 的情况是否出现过(下面代码使用的是 int 数…

matlab 获取视频图像的信息

获取视频图像的信息可以通过get函数来获取,如get(vid)或者get(getselectedsource(vid))。使用set函数可以设置摄像头获取的图像的一些属性值,也可以直接使用结构数组的“点”来赋值,比如,要持续通过摄像头获取图像,则可…

tomcat使用ssl_使用SSL和Spring Security保护Tomcat应用程序的安全

tomcat使用ssl如果您看过我的上一个博客,您会知道我列出了Spring Security可以做的十件事 。 但是,在开始认真使用Spring Security之前,您真正要做的第一件事就是确保您的Web应用使用正确的传输协议,在这种情况下为HTTPS –毕竟&a…

matlab delete、clf、cla、close、closereq删除对象

matlab中删除对象 删除对象 (1)delete:删除文件或对象图形 删除文件对象h的格式为:delete(filename)或delete filename 删除图形对象h的格式为:delete(h); 若要无条件删除所有的图形对象,则:set…

Linux系统调用过程分析

参考: 《Linux内核设计与实现》 0 摘要 linux的系统调用过程: 层次如下: 用户程序------>C库(即API):INT 0x80 ----->system_call------->系统调用服务例程-------->内核程序 先说明一下&#…

Spring Boot和应用程序上下文层次结构

Spring Boot支持一种指定Spring应用程序上下文层次结构的简单方法。 这篇文章只是演示了此功能,我尚未在我从事的项目中很好地使用它。 Spring Cloud使用此功能来创建引导上下文 ,在该上下文中,如果需要,可以从外部配置服务器加载…

drf 解析器,响应器,路由控制

解析器 作用: 根据请求头 content-type 选择对应的解析器对请求体内容进行处理。 有application/json,x-www-form-urlencoded,form-data等格式使用:局部使用:from rest_framework.parsers import JSONParser,FormParseparser_classes [JSONParser, ]全局…

matlab max与min获取矩阵最大最小值函数

1.matlab中Max的用法1(Min类似) Matlab中max函数在矩阵中求函数大小的实例如下: C max(A) 1)返回一个数组各不同维中的最大元素。 2)如果A是一个向量,max(A)返回A中的最大元素。 3)如果A是一个矩阵&…

shell中exec解析

参考:《linux命令、编辑器与shell编程》 《unix环境高级编程》exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。 bash shell的命令分为两类:外部命…

今天敢用OSS放视频,明天阿里云就敢收你房子

关注卢松松,会经常给你分享一些我的经验和观点。 请教各位大佬:如果网站里,视频多的话,有什么加速的办法,使用CDN可以嘛? 今天群友king王咨询了这个问题:他的客户网站在美国,用美国节点的服务…

matlab meshgrid

meshgrid用于从数组a和b产生网格。生成的网格矩阵A和B大小是相同的。它也可以是更高维的。 用法: [A,B]Meshgrid(a,b) 生成size(b)Xsize(a)大小的矩阵A和B。它相当于a从一行重复增加到size(b)行,把b转置成一列再重复增加到size(a)列。因此命令等效于: …

连续锁定2个不同的锁会死锁_研究死锁–第5部分:使用显式锁定

连续锁定2个不同的锁会死锁在我的上一个博客中,我研究了使用Java的传统synchronized关键字和锁排序来修复破碎的,死锁的余额转移示例代码。 但是,有另一种方法称为显式锁定。 在这里,将锁定机制称为显式而非隐式的想法是&#xf…

fork source exec区别差异

fork 使用 fork 方式运行 script 时, 就是让 shell(parent process) 产生一个 child process 去执行该 script, 当 child process 结束后, 会返回 parent process, 但 parent process 的环境是不会因 child process 的改变而改变的. source 使用 source 方式运行 scrip…

LOJ2980 THUSC2017大魔法师(线段树+矩阵乘法)

线段树每个节点维护(A,B,C,len)向量&#xff0c;操作即是将其乘上一个矩阵。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long lo…

在ECR上推送Spring Boot Docker映像

在先前的博客中&#xff0c;我们将Spring Boot应用程序与EC2集成在一起。 它是您可以在Amazon Web Services上进行的最原始的部署形式之一。 在本教程中&#xff0c;我们将使用我们的应用程序创建一个docker映像&#xff0c;该映像将存储到Amazon EC2容器注册表中 。 您需要安…

Linux信号处理机制

在Linux中&#xff0c;信号是进程间通讯的一种方式&#xff0c;它采用的是异步机制。当信号发送到某个进程中时&#xff0c;操作系统会中断该进程的正常流程&#xff0c;并进入相应的信号处理函数执行操作&#xff0c;完成后再回到中断的地方继续执行。 需要说明的是&#xff0…

pyspider爬虫框架

特点&#xff1a; 去重处理&#xff0c;结果监控&#xff0c;多进程处理&#xff0c;pyquery提取&#xff0c;错误重试&#xff0c;webUI管理&#xff0c;代码简洁&#xff0c;JS渲染 安装&#xff1a; anaconda里边没搜到pyspider&#xff0c;所以手动安装 查看pyspider的命令…

matlab subplot同时显示多幅图像

subplot是MATLAB中的函数。 使用方法&#xff1a;subplot&#xff08;m,n,p&#xff09;或者subplot&#xff08;m n p&#xff09;。 subplot是将多个图画到一个平面上的工具。其中&#xff0c;m表示是图排成m行&#xff0c;n表示图排成n列&#xff0c;也就是整个figure中有n个…

matlab var求方差

对二维数组a b1 var(a); % 按默认来求 b2 var(a, 0); % 默认的公式&#xff08;用N-1&#xff09; c1 var(a, 1); % 另外的公式&#xff08;用N&#xff09; d1 var(a, 0, 1); % 对每列操作&#xff08;用N-1&#xff09; d2 var(a, 0, 2); % 对每行操作&#xff08;…