将Shiro与pac4j jax-rs实现集成

时间:2018-11-13 02:58:01

标签: java security shiro java-security

我正在使用pac4j的jsx-rs实现为我的应用程序仅启用身份验证。为了获得授权,我想使用Shiro。但是我不确定如何将Shiro与pac4j集成。

当前,我有一个Feature可以完成必要的JAX-RS配置,并且我已经将它设置为Provider

以下是我已经注册的功能和提供者。

    featureContext
    .register(new JaxRsConfigProvider(config))
    .register(new Pac4JSecurityFeature())
    .register(new Pac4JValueFactoryProvider.Binder())
    .register(new ServletJaxRsContextFactoryProvider())
    .register(new Pac4JSecurityFilterFeature(false, null, "keycloakoidcclient", "callback", false))

我正在使用Shiro的AuthorizationFilter进行身份验证。我的意思是我要根据登录的用户创建令牌。我已经使用Guice的ServletModule注册了此过滤器。但是我无法保留已登录的用户。我正在尝试使用SecurityContext注入Jersey的@Context。但是过滤器的顺序混乱了。 AuthorizationFilter在身份验证完成之前被调用。因此SecurityContext始终为空。

是否有更好的方法将Shiro与pac4j集成?

1 个答案:

答案 0 :(得分:0)

Shiro提供了自己的Feature实现,可以与JAX-RS一起使用。将模块依赖项添加到项目中就可以了。

并且为了从pac-4j获取用户上下文,我实现了一个Authorizer,在其中注入了OIDC配置文件。我创建了一个自定义用户配置文件,并将其提供给Shiro,如下所示:

SecurityUtils.getSubject().login(new DemoToken(profile));

这样Shiro可以获取用户个人资料,然后进行授权。