【问题标题】:spring-boot extended authorizationspring-boot 扩展授权
【发布时间】:2014-09-18 11:18:00
【问题描述】:

我有一个 Spring Boot 应用程序,我正在尝试实现自定义授权模式,扩展标准 @RolesAllowed

我创建了一个自定义AccessDecisionManager,它读取@RolesAllowed,如果有一个使用我的自定义注释注释的参数,我将检查用户是否在指定范围内具有指定角色。

@RequestMapping(value = "/{id}/user/list", method = RequestMethod.GET)
@RolesAllowed("manager")
public List<User> userList(@PathVariable("id") @AuthScope Project project) throws NotFoundException {
            return projectService.findUsersByProject(project);
}

我已经使用自定义授权架构所需的逻辑实现了 AccessDecisionManager,现在我无法配置我的应用程序安全性以使用此 AccessDecisionManager

 @Override
    protected void configure(HttpSecurity http) throws Exception {

        http
                .authorizeRequests()
                    .accessDecisionManager(accessDecisionManager())
                    .anyRequest().permitAll()
                    .and()
                .csrf()
                    .disable()
                    .httpBasic();
    }

这是我得到的错误:

AccessDecisionManager does not support secure object class: class org.springframework.security.web.FilterInvocation

关于我做错了什么有什么想法吗? 干杯

【问题讨论】:

  • 你真的需要定制的东西吗?这不是你可以用带有一些 EL 魔法的 @Secured 注释来做的事情吗?
  • 或者使用 Sprnig Security Pre/Post 授权。
  • 我意识到我想做的事情可以通过以下方式完成: -acessDecisionManager; - 前后注释; - 安全注释;问题仍然存在,一旦我必须在 accessDecisionManager 上进行自定义授权,就像我现在正在做的那样,或者将此逻辑更改为 @Secured 或 pre-post 注释。最后,我必须配置我的应用程序安全性以使用此逻辑,这是我现在的问题。
  • 如果您没有自定义配置,则无需配置任何内容,因为它会正常工作。

标签: java spring spring-security spring-boot


【解决方案1】:

您要求将您的 AccessDecisionManager 应用于 HTTP 过滤器链(通过将其插入 HttpSecurity),但是(没有看到代码)我猜它并不意味着支持它。它更有可能与GlobalMethodSecurityConfiguration 一起工作。我认为您需要扩展该类添加覆盖accessDecisionManager() 方法。此处示例:https://spring.io/blog/2013/07/04/spring-security-java-config-preview-method-security/

【讨论】:

    【解决方案2】:

    @Dave 你是对的,这就是我设法让它工作的方式。

    public class MethodSecurityConfiguration extends GlobalMethodSecurityConfiguration {
    
        @Override
        protected AccessDecisionManager accessDecisionManager() {
            return new AuthScopeDecisionManager();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      • 2019-02-04
      • 2020-09-27
      • 2018-07-04
      • 1970-01-01
      • 2022-08-04
      • 1970-01-01
      相关资源
      最近更新 更多