java - jetty : store request-specific information

标签 java android jakarta-ee jersey

我正在创建某种具有基本身份验证的 RESTful API。为了处理身份验证信息,我添加了一个自定义 ContainerRequestFilter。这工作得很好,但我想设置全局信息,例如调用者的“用户名”。如何设置全局/特定于请求的信息或属性并在“ Controller ”方法中获取它们?

//some filter
public class AuthFilter implements ContainerRequestFilter{

    //...

    @Override
    public void filter( ContainerRequestContext requestContext ) throws IOException {
        requestContext.setProperty("username", "someusername");
    }


    //...

}

//example "route-handler"
@GET 
@Produces(MediaType.APPLICATION_JSON)
public List<Event> getEvents() {
    //HOW to get the username property?!
}

最佳答案

您可以将 HttpServletRequest 注入(inject) Controller ,并使用 HttpServletRequest.getAttribute 检索您在 ContainerRequestContext.setProperty 中设置的值。

@GET 
@Produces(MediaType.APPLICATION_JSON)
public List<Event> getEvents(@Context HttpServletRequest req) {
    String username = (String) req.getAttribute("username");  
    ...
}

我已经在 Glassfish/Jersey 上使用过它,它运行良好,因此它应该可以在您的环境中运行。

关于java - jetty : store request-specific information,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25327395/

相关文章:

java - 基于图像的验证码

机器人 : set the menu out/visible

java - 无法在 Eclipse 上安装 glassfish 支持

java - 启动画面不会显示,只有空白区域

Java:repaint() 不在 for 循环中调用paintComponent()

java - Facebook requestNewPublishPermissions 的回调 - Android

android - 从 Firebase 中的嵌套节点获取数据

java - 如果只有一个 servlet 发生变化,就会发生强制上传 war ?

java - 从在 weblogic 10.0 上运行的应用程序调用在 weblogic 10.3 上运行的 EJB 时出现 ClassNotFoundException

Java同步锁