【问题标题】:Integrate Shiro with pac4j jax-rs implementation将 Shiro 与 pac4j jax-rs 实现集成
【发布时间】:2019-04-15 19:43:27
【问题描述】:

我正在使用 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 注入泽西岛的SecurityContext。但是过滤器排序搞砸了。 AuthorizationFilter 在身份验证完成之前被调用。因此SecurityContext 始终为空。

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

【问题讨论】:

    标签: java security shiro java-security


    【解决方案1】:

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

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

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

    这样Shiro就可以得到用户的profile,然后就可以进行授权了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-20
      • 2017-06-14
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      • 2016-05-07
      • 2014-04-20
      相关资源
      最近更新 更多