2017-12-07 31 views
0

独自のaclシステムに基づいたカスタムPermissionEvaluatorがあります。別のPermissionEvaluator実装を追加したいと思います。既存のPermissionEvaluatorと競合する可能性があります。どうすればそれを避けることができますか?両方のPermissionEvaluatorsに何らかの集約メカニズムを導入しますか?前もって感謝します。複数のPermissionEvaluatorが同じアプリケーションにあります

+0

あなたの例外は何ですか? stacktraceを送信する –

答えて

0

この問題の解決策を見つけました。

@Configuration 
@Lazy(true) 
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) 
public class Config 
{ 

    @Autowired 
    Repository repository1; 

    @Autowired 
    Repository repository2; 

    @Bean 
    public PermissionEvaluator permissionEvaluator() 
    { 
    List<PermissionEvaluator> evaluators = new ArrayList<>(); 
    evaluators.add(new PermissionEvaluator1(repository1)); 
    evaluators.add(new PermissionEvaluator2(repository2)); 
    return new EvaluatorsAggregator(evaluators); 
    } 
} 

多分これが誰かを助けることができる:私はその後、私は必要なすべての評価者を追加した設定ファイルに

public class EvaluatorsAggregator 
    implements PermissionEvaluator 
{ 

    private List<PermissionEvaluator> evaluators; 

    public EvaluatorsAggregator(List<PermissionEvaluator> evaluators) 
    { 
    super(); 
    this.evaluators = evaluators; 
    } 

    @Override 
    public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) 
    { 
    return evaluators.stream() 
     .map(ev -> ev.hasPermission(authentication, targetDomainObject, permission)) 
     .reduce(Boolean::logicalOr) 
     .orElse(false); 
    } 

    @Override 
    public boolean hasPermission(
     Authentication authentication, 
     Serializable targetId, 
     String targetType, 
     Object permission) 
    { 
    return false; 
    } 
} 

を作成しました。

関連する問題