2017-05-09 106 views
1

我有一個Spring引導(1.5.3)oauth2應用程序,它確保了URL和方法的安全。 @PreAuthorize(「hasRole(‘ROLE_NAME’)」)春季啓動安全OAuth2 +自定義權限評估

現在我想添加自定義PermissionEvaluator,這樣我可以用 @PreAuthorize安全法(「調用hasPermission(#ID:方法的安全性是通過目前的工作,'typeName','permissionName')「)。

我通過擴展GlobalMethodSecurityConfiguration啓用此功能:

@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有時會被調用 - 大多數情況下它不會被調用。我懷疑這是事做:

*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引導oauth2應用程序中?

謝謝。

+0

我禁用了oauth2自動配置沒有任何區別,所以消除了這一點。 – Chappers1975

回答

0

原來不是彈簧安全配置問題。這個問題與pom中的aspectj編譯器配置有關。長話短說,AnnotationSecurityAspect的完全限定類名是不正確的:的

org.springframework.security.access.intercept.aspectj.AnnotationSecurityAspect 

代替

org.springframework.security.access.intercept.aspectj.aspect.AnnotationSecurityAspect 

造成@PreAuthorize註釋被忽略。我的理解是@PreAuthorize(「hasRole ...」)正在工作是錯誤的 - 由於測試有時在通過Eclipse運行時成功,但從未在命令行上通過mvn運行成功時感到困惑。