- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在JAX-RS中处理请求时,我研究的是整个过程的流程如下;
我知道有不同的组件,它们用于可插入性的目的,就像我们可以有过滤器并且可以将它们插入到任何资源方法中
我们想要,拦截器也是如此(我知道它们是围绕 MessageBodyWriters 和 MessageBodyReaders 触发的)。但我对每个组件都感到困惑
以及每个组件在请求通过它们时可以访问的信息,
我学到的症结是:
过滤器
只能修改(或应该处理)标题。但是我在过滤器的 ContainerRequestContext 中看到了一个 getEntityStream 方法。这个方法也指的是哪个流?
拦截器
好吧,我唯一的例子是通过互联网将流压缩到一些 GzipReader(或类似的东西)中。它是拦截器的唯一用途吗?而且我怀疑拦截器中可以使用整个请求主体,请参见下图。
MessageBodyReader/Writers
它们是可以理解的,我猜它们具有与拦截器相同级别的请求信息。
问题:
我不明白每个组件可以从传入的请求中访问什么,以及每个组件中应该修改什么,这个问题可能很广泛,但专门
指向查询解决方案的链接可能会有所帮助。
编辑:
刚测试过。过滤器可以访问消息体并可以对其进行修改,拦截器也是如此。 ://
最佳答案
让我从过滤器开始:
过滤器:
过滤器可以修改入站和出站请求和响应,包括修改 header 、实体和其他请求/响应参数。
进一步的过滤器被归类为 容器/服务器过滤器 和 客户过滤器 .
考虑服务器过滤器:还有另外两种明显的类型:
(ContainerRequestContext requestContext)
和
(ContainerResponseContext responseContext)
.
public interface ContainerRequestContext
public interface ContainerResponseContext
(ContainerRequestContext requestContext)
public class AuthorizationRequestFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext)
throws IOException {
final SecurityContext securityContext =
requestContext.getSecurityContext();
if (securityContext == null ||
!securityContext.isUserInRole("privileged")) {
requestContext.abortWith(Response
.status(Response.Status.UNAUTHORIZED)
.entity("User cannot access the resource.")
.build());
}
}
}
@PreMatching
public class PreMatchingFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext)
throws IOException {
// change all PUT methods to POST
if (requestContext.getMethod().equals("PUT")) {
requestContext.setMethod("POST");
}
}
}
关于java - JAX-RS,组件可以通过请求生命周期访问哪些信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42407773/
我正在开发一个使用多个 turtle 的滚动游戏。玩家 turtle 根据按键命令在 Y 轴上移动。当危害和好处在 X 轴上移动时,然后循环并改变 Y 轴位置。我尝试定义一个名为 colliding(
我不明白为什么他们不接受这个作为解决方案,他们说这是一个错误的答案:- #include int main(void) { int val=0; printf("Input:- \n
我正在使用基于表单的身份验证。 我有一个注销链接,如下所示: 以及对应的注销方法: public String logout() { FacesContext.getCurren
在 IIS7 应用程序池中有一个设置 Idle-time out 默认是 20 分钟,其中说: Amount of time(in minutes) a worker process will rem
我是一名优秀的程序员,十分优秀!