Jersey ContainerRequestFilter中的读取请求属性

Jersey ContainerRequestFilter中的读取请求属性,jersey,Jersey,我有一个Jersey API,它由一个SSO实现Shibboleth保护。Shibboleth将登录用户的id放入请求属性中。在后端,我使用Shiro进行授权。Shiro希望了解登录用户,以便加载权限 将用户ID从请求属性中取出并放入Shiro的正确方法是什么?现在,我想做的是: @Provider public final class ShiroLoginFilter implements ContainerRequestFilter { @Context private H

我有一个Jersey API,它由一个SSO实现Shibboleth保护。Shibboleth将登录用户的id放入请求属性中。在后端,我使用Shiro进行授权。Shiro希望了解登录用户,以便加载权限

将用户ID从请求属性中取出并放入Shiro的正确方法是什么?现在,我想做的是:

@Provider
public final class ShiroLoginFilter implements ContainerRequestFilter {

    @Context
    private HttpServletRequest request;

    @Override
    public void filter(final ContainerRequestContext requestContext)
        throws IOException {

        final String userId = (String) this.request.getAttribute("nameid");
        final Subject subject = SecurityUtils.getSubject();
        subject.login(new LocusAuthenticationToken(userId));

    }
}

不幸的是,由于以下原因,我无法将请求上下文注入到筛选器中。每个用户都需要“登录”才能加载权限。我不希望在API的每个方法中都重复登录代码。我的老板也不允许我使用web.xml过滤器。我在这里有什么好的选择吗?

您还应该能够直接从
ContainerRequestContext
获取
ServletRequest
属性,如方法的JavaDoc中所述:

在Servlet容器中,属性与
ServletRequest
同步,并公开
ServletRequest
中可用的所有属性。属性的任何修改也会反映在关联的
ServletRequest
的属性集中

注意:自Jersey 2.4(于2013年10月发布)以来,HttpServletRequest应按预期工作