【发布时间】: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