将 Shiro 与 pac4j jax-rs 实现集成
Integrate Shiro with pac4j jax-rs implementation
我正在使用 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
注册了这个过滤器。但我无法获得登录用户。我正在尝试使用 @Context
注入 Jersey 的 SecurityContext
。但是过滤器顺序混乱了。 AuthorizationFilter
在身份验证完成之前被调用。因此 SecurityContext
始终为空。
有没有更好的方法将 Shiro 与 pac4j 集成?
Shiro 提供了自己的 Feature
实现与 JAX-RS
一起使用。将该模块依赖项添加到项目中就可以了。
为了从 pac-4j 获取用户上下文,我实现了一个 Authorizer
,我在其中注入了 OIDC 配置文件。我创建了一个自定义用户配置文件并将其提供给 Shiro,如下所示:
SecurityUtils.getSubject().login(new DemoToken(profile));
这样Shiro就可以获取到用户资料,然后就可以进行授权了。
我正在使用 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
注册了这个过滤器。但我无法获得登录用户。我正在尝试使用 @Context
注入 Jersey 的 SecurityContext
。但是过滤器顺序混乱了。 AuthorizationFilter
在身份验证完成之前被调用。因此 SecurityContext
始终为空。
有没有更好的方法将 Shiro 与 pac4j 集成?
Shiro 提供了自己的 Feature
实现与 JAX-RS
一起使用。将该模块依赖项添加到项目中就可以了。
为了从 pac-4j 获取用户上下文,我实现了一个 Authorizer
,我在其中注入了 OIDC 配置文件。我创建了一个自定义用户配置文件并将其提供给 Shiro,如下所示:
SecurityUtils.getSubject().login(new DemoToken(profile));
这样Shiro就可以获取到用户资料,然后就可以进行授权了。