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