【问题标题】:jetty: store request-specific informationjetty:存储特定于请求的信息
【发布时间】:2014-08-15 13:35:49
【问题描述】:

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

//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?!
}

【问题讨论】:

    标签: java android jakarta-ee jersey


    【解决方案1】:

    您可以将HttpServletRequest 注入控制器并使用HttpServletRequest.getAttribute 检索您在ContainerRequestContext.setProperty 中设置的值。

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

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

    【讨论】:

    • 我总是收到“Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest”错误消息。我将 servlet-api 依赖项添加到我的 pom 中,没有更改。
    • 根据我查看的文档,该类是 Jetty 的一部分。你用的是什么版本?你有机会发布日志吗?
    • 在我的过滤器中我调用requestContext.setProperty("username", phone_username);,但在控制器中(Long) request.getAttribute("username"); 为空。怎么了?
    猜你喜欢
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多