@Bean @ConditionalOnMissingBean(name = "defaultPrincipalResolver") @RefreshScope public PrincipalResolver defaultPrincipalResolver(final List<PrincipalResolutionExecutionPlanConfigurer> configurers) { val plan = new DefaultPrincipalResolutionExecutionPlan(); val sortedConfigurers = new ArrayList<PrincipalResolutionExecutionPlanConfigurer>(configurers); AnnotationAwareOrderComparator.sortIfNecessary(sortedConfigurers); sortedConfigurers.forEach(c -> { LOGGER.trace("Configuring principal resolution execution plan [{}]", c.getName()); c.configurePrincipalResolutionExecutionPlan(plan); }); plan.registerPrincipalResolver(new EchoingPrincipalResolver()); val resolver = new ChainingPrincipalResolver(); resolver.setChain(plan.getRegisteredPrincipalResolvers()); return resolver; }
@Bean @RefreshScope public PrincipalResolver trustedPrincipalResolver() { val resolver = new ChainingPrincipalResolver(); val personDirectory = casProperties.getPersonDirectory(); val trusted = casProperties.getAuthn().getTrusted(); val principalAttribute = StringUtils.defaultIfBlank(trusted.getPrincipalAttribute(), personDirectory.getPrincipalAttribute()); val bearingPrincipalResolver = new PrincipalBearingPrincipalResolver(attributeRepository.getIfAvailable(), trustedPrincipalFactory(), trusted.isReturnNull() || personDirectory.isReturnNull(), principalAttribute, trusted.isUseExistingPrincipalId() || personDirectory.isUseExistingPrincipalId()); resolver.setChain(CollectionUtils.wrapList(new EchoingPrincipalResolver(), bearingPrincipalResolver)); return resolver; }