1

私は、URLのメソッドとメソッドを保護している春のブート(1.5.3)oauth2アプリケーションを持っています。私は今、私は @PreAuthorize(「hasPermission(#IDを持つメソッドを確保することができるようにカスタムPermissionEvaluatorを追加しようとしている @PreAuthorize(「hasRoleも( 『ROLE_NAME』)」)スプリングブートセキュリティOAuth2 +カスタムパーミッションエバリュエータ

:メソッドのセキュリティは現在経由して取り組んでいます、 'typeName'、 'permissionName') ")。

私はGlobalMethodSecurityConfigurationを拡張することで、この機能を有効にしています:簡潔にするために省略PermissionEvaluatorクラス:

@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; 
    } 

}

注意を。

問題は、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のインスタンスを作成:私はこれはとは何かである疑いがあります。

誰かがSpringブートoauth2アプリケーションにPermissionEvaluatorを正常に注入しましたか?

ありがとうございました。

+0

私はoauth2の自動設定を無効にしていましたが、それはそれを排除しました。 – Chappers1975

答えて

0

春のセキュリティ設定の問題ではないことが判明しました。この問題は、pomのaspectjコンパイラ設定に関連していました。かいつまんで、AnnotationSecurityAspectの完全修飾クラス名が間違っていました:

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

代わりに無視されることに注釈を@PreAuthorize原因

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

の。 @PreAuthorize( "hasRole ...")がうまく動いていたのは間違っていました。テストはEclipseを実行すると成功することがありましたが、コマンドラインでmvn経由で実行されることはありません。

関連する問題