jetty:存储特定于请求的信息

时间:2014-08-15 13:35:49

标签: java android java-ee jersey

我正在使用基本身份验证创建某种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?!
}

1 个答案:

答案 0 :(得分: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上使用它并且它工作正常,因此它应该在您的环境中工作。