【问题标题】:How to use Apache Shiro for authorization only?如何仅使用 Apache Shiro 进行授权?
【发布时间】:2016-06-06 05:55:38
【问题描述】:

在我解释这个问题之前,我应该说我们只需要 Apache Shiro 来进行授权,并且 OAuth2 已经启用了身份验证。

所以我启用 Shiro 的代码与 link here 中的代码完全相同。 我也检查了这个issue。但是对我来说,如果我启用 LifecycleBeanPostProcessor 几乎大多数 bean 都会为空。正如第二个链接中所建议的那样,我在配置类中创建了静态方法,但没有运气。

所以我的问题是,有没有办法只启用授权而不注册 shiro 过滤器?如果没有,如何解决这个问题?因为看起来 ShiroFilterFactoryBean 需要 LifecycleBeanPostProcessor 并且会破坏整个应用程序。

我们正在使用最新版本的 Spring Boot 和 Shiro 1.2.4

【问题讨论】:

  • 如果没有过滤器,您将不得不自己完成所有操作 - 您可以查看 LifecycleBeanPostProcessor 和过滤器的源代码以了解您需要实现什么。如果它只是您需要的授权,它可能不是那么糟糕。
  • 嗯.. 我检查了代码,所以它看起来像是 AuthorizingRealm 并且我创建了自己的 AuthorizingRealm 以避免身份验证,但问题是启用后的生命周期处理器会破坏 Spring,我得到 NPE。看起来它与 Spring boot 不兼容...我仍在尝试调试这里的所有东西
  • 我使用 shiro 并使用生命周期处理器进行引导。什么是堆栈跟踪?
  • Shiro 甚至 Spring 都没有错误...问题是在启动时我在使用 @ConfigurationProperties 注释的类上得到 NPE。他们都是空的
  • 您使用的是 Gradle 还是 Maven?您是否添加了使用 ConfigurationProperties (org.springframework.build.gradle:propdeps-plugin:0.0.7) 所需的额外插件?

标签: spring-boot authorization shiro


【解决方案1】:

正如 cmets 中的 issue 中所述,您需要在主题中设置一个已经过身份验证的身份,这可以使用 Subject.Builder() 来完成(我在这里使用的是 1.5.2 版本)。

Subject user = new Subject.Builder()
    .principals(new SimplePrincipalCollection("bud", "myRealm"))
    .authenticated(true)
    .buildSubject();

if (user.hasRole("admin")) {
    // do some authorized stuff
}

当实现自定义领域时,可以通过从领域的支持方法返回 false 来禁用身份验证功能,如 here 所述。

【讨论】:

    猜你喜欢
    • 2017-04-16
    • 2016-03-07
    • 2013-06-15
    • 2015-12-01
    • 2013-11-28
    • 2013-09-20
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    相关资源
    最近更新 更多