我正在创建某种具有基本身份验证的 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/