将Shiro与pac4jjax-rs实现集成



我正在使用pac4j的jsx-rs实现来仅为我的应用程序启用AUTHENTICATION。为了获得授权,我想使用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注册了这个过滤器。但是我无法联系到登录的用户。我正在尝试使用@Context注入Jersey的SecurityContext。但是过滤器的排序很混乱。AuthorizationFilter在身份验证完成之前被调用。因此SecurityContext总是为空。

有没有更好的方法将Shiro与pac4j集成在一起?

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

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

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

这样Shiro就可以获得用户配置文件,然后进行授权。

相关内容

  • 没有找到相关文章

最新更新