首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring Boot安全OAuth2 +自定义权限计算器

Spring Boot安全OAuth2 +自定义权限计算器
EN

Stack Overflow用户
提问于 2017-05-09 17:14:39
回答 1查看 1.2K关注 0票数 1

我有一个Spring boot (1.5.3) oauth2应用程序,它保护了URL和方法。方法安全性目前通过:@PreAuthorize("hasRole('ROLE_NAME')")

我现在正在尝试添加一个自定义类型,这样我就可以用@ PermissionEvaluator (“hasPermission(#id,'typeName','permissionName')")来保护方法。

我通过扩展GlobalMethodSecurityConfiguration来启用此功能:

代码语言:javascript
运行
复制
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true, mode = 
AdviceMode.ASPECTJ, jsr250Enabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration 
{

    @Autowired
    private MatterRepository matterRepository;
    @Autowired
    private MatterTeamMemberRepository matterTeamMemberRepository;

    @Override
    protected MethodSecurityExpressionHandler createExpressionHandler() {
      Map<String, Permission> permissionsMap = new HashMap<>();
      permissionsMap.put(ReadMatterPermission.class.getSimpleName(),
      new ReadMatterPermission(matterRepository, matterTeamMemberRepository));

      OAuth2MethodSecurityExpressionHandler handler = new 
      OAuth2MethodSecurityExpressionHandler();
      handler.setPermissionEvaluator(new 
          EntityPermissionEvaluator(permissionsMap));
      return handler;
    }

}

注意:为简洁起见,省略了PermissionEvaluator类。

我遇到的问题是hasPermission有时会被调用--大多数情况下它不会被调用。我怀疑这与以下内容有关:

代码语言:javascript
运行
复制
*Auto-configure an expression handler for method-level security (if the user 
* already has
* {@code @EnableGlobalMethodSecurity}).  
o.s.b.autoconfigure.security.oauth2.method.OAuth2MethodSecurityConfiguration

在处理我的配置之前创建一个OAuth2MethodSecurityExpressionHandler实例。

有没有人成功地将PermissionEvaluator注入spring boot oauth2应用程序?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-05-10 11:29:20

事实证明,这不是一个spring安全配置问题。该问题与pom中的aspectj编译器配置有关。长话短说,AnnotationSecurityAspect的完全限定类名不正确:

代码语言:javascript
运行
复制
org.springframework.security.access.intercept.aspectj.AnnotationSecurityAspect 

而不是

代码语言:javascript
运行
复制
org.springframework.security.access.intercept.aspectj.aspect.AnnotationSecurityAspect

导致@PreAuthorize注释被忽略。我的理解是@PreAuthorize("hasRole...")测试有时会在通过Eclipse运行时成功,但在命令行上通过mvn运行时永远不会成功,这让人困惑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43865800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档