package org.acme.manrest;
import javax.enterprise.context.RequestScoped;
import javax.persistence.PrePersist;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import org.acme.jpa.TBusiness;
import org.jboss.logging.Logger;
@RequestScoped
public class HeaderValue {
private static final Logger LOG = Logger.getLogger(HeaderValue.class);
@Context
HttpServletRequest request;
public HttpServletRequest getRequest() {
return request;
}
@Context
HttpHeaders httpHeaders;
@HeaderParam("x-remote-user")
String userName;
public String getUserName() {
LOG.info("xxx: " + getRequest().getHeader("x-remote-user"));
LOG.info("userName: " + userName);
LOG.info("getUserName2: " + getUserName2());
LOG.info("getUserName3: " + getUserName3());
return userName;
}
public String getUserName2() {
return httpHeaders.getRequestHeader("x-remote-user").get(0);
}
public String getUserName3() {
LOG.info("getUserName from class " + request.getHeader("x-remote-user"));
return request.getHeader("x-remote-user");
}
@PrePersist
void onPrePersist(TBusiness myEntity) {
LOG.info("getUserName: " + userName);
myEntity.createdBy = userName;
myEntity.updatedBy = userName;
}
}
切换到JWT并在Quarkus中使用JWT RBAC可能是一种变通方法吗?
通过添加底层依赖关系来实现这一点:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-undertow</artifactId>
</dependency>
然后在PrePersist
方法下面创建的EntityListener
类中:
@RequestScoped
// @Path("api/v1/Header")
public class AuditingEntityListener {
private static final Logger LOG = Logger.getLogger(AuditingEntityListener.class);
// Inject the bean so that Quarkus does not remove it at build time (IMPORTANT)
@Inject
HttpServletRequest requestNotUsed;
@PrePersist
void onPrePersist(TBusiness myEntity) {
HttpServletRequest HSR = CDI.current().select(HttpServletRequest.class).get();
LOG.info("HSR getRequestHeader user: " + HSR.getHeader("x-remote-user"));
}
}
在Quarkus中使用JWT RBAC同样有效:
@PrePersist
void onPrePersist(TBusiness myEntity) {
JsonWebToken context = CDI.current().select(JsonWebToken.class).get();
LOG.info("context: " + context.getClaim("preferred_username"));
}
我想获取在GraphQl查询调用期间传递的头值。在rest api HttpServletRequest的情况下,我们可以先做一些类似的事情。getheader() 我想从dataFetching环境中获取它,但从该值获取的上下文并没有让我从请求中获取标头值。 我不打算更改解析器方法调用,但任何改进代码的输入都会很好。
如何在JAX-RS中实现WriterInterceptor接口时访问请求头? 完整的代码如下:
我更倾向于使用Lambda和Java8来设置,但是使用node.js的示例也有助于理解如何实现这一点。
问题内容: 在执行ModelForm时,我想根据当前用户是否为超级用户执行不同类型的验证检查。如何访问当前的请求用户? 问题答案: 您可以将用户对象作为额外的参数传递给表单构造函数。 例如 构造函数将如下所示: 然后根据需要在clean_XX表单中使用user
问题内容: 我想将自定义标头添加到jQuery的AJAX POST请求中。 我已经试过了: 当我发送此请求并观看FireBug时,看到以下标头: 选项xxxx / yyyy HTTP / 1.1 主机:127.0.0.1:6666 用户代理:Mozilla / 5.0(Windows NT 6.1; WOW64; rv:11.0)Gecko / 20100101 Firefox / 11.0 接受
问题内容: 我的JavaScript应用程序需要确定资源的长度, 然后 才能使用Ajax下载资源。通常这不是问题,您只需发出HEAD请求并提取即可。 但是,资源存储在与客户端不同的服务器上。(我控制的服务器)。因此,我正在使用CORS发出跨域Ajax请求,并已设置服务器以使用自定义标头响应HEAD请求和GET / POST请求的预检请求。 总的来说,这很有效,但是在使用CORS时,我似乎找不到一种