0

봄 부트 버전 작동하지 GitHub의에서 this example을 다음과 같은 여러 리소스를 구성하려고봄 보안 OAuth2를 : 1.5.8.RELEASE 봄의 클라우드 버전 : 여러 ResourceServerConfiguration이

(zuul 사용) Edgware.RELEASE를하고, 할 수있다 ' 그것이 작동하게하지 마라.

내 코드는 다음과 같습니다

class ResourceServerConfigurationFactory 
{ 
    static ResourceServerConfiguration criarResourceServerConfiguration(String resourceId, int order, 
      HttpSecurityConfigurer configurer) 
    { 
     ResourceServerConfiguration resource = new ResourceServerConfiguration() 
     { 
      // Switch off the Spring Boot @Autowired configurers 
      public void setConfigurers(List<ResourceServerConfigurer> configurers) 
      { 
       super.setConfigurers(configurers); 
      } 
     }; 

     resource.setConfigurers(Arrays.<ResourceServerConfigurer>asList(new ResourceServerConfigurerAdapter() 
     { 
      @Override 
      public void configure(ResourceServerSecurityConfigurer resources) throws Exception 
      { 
       resources.resourceId(resourceId); 
      } 

      @Override 
      public void configure(HttpSecurity http) throws Exception 
      { 
       configurer.configure(http); 
      } 
     })); 

     resource.setOrder(order); 

     return resource; 
    } 
} 

interface HttpSecurityConfigurer 
{ 
    public void configure(HttpSecurity http) throws Exception; 
} 

그리고 내 구성 :

@Configuration 
public class OAuthResourceConfiguration 
{ 
    @Bean 
    protected ResourceServerConfiguration usuarioResources() 
    { 
     return ResourceServerConfigurationFactory.criarResourceServerConfiguration("usuario", -10, 
       http -> http.antMatcher("/user").authorizeRequests().anyRequest().permitAll()); 
    } 

    @Bean 
    protected ResourceServerConfiguration funcaoResources() 
    { 
     return ResourceServerConfigurationFactory.criarResourceServerConfiguration("funcao", -20, 
       http -> http.antMatcher("/ws").authorizeRequests().anyRequest().permitAll()); 
    } 
} 

마지막으로, 봄 부팅 응용 프로그램 :

@SpringBootApplication 
@EnableResourceServer 
@EnableZuulProxy 
public class ApiGatewayApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(ApiGatewayApplication.class, args); 
    } 
} 

현황 :

  • Spring은 두 ResourceServerConfiguration 빈을 인스턴스화합니다.
  • 높은 순위의 bean 만 작동합니다 (/ user 엔드 포인트는 ok입니다./ws endpoint는 인증을 계속 요청합니다)
  • 스프링 로그에서는/user ant matcher 만 사용된다는 것을 알 수 있습니다./ws는 완전히 무시됩니다.

무엇이 잘못 되었습니까?

답변

0

내가 만든 팩토리 클래스와 관련된 문제입니다.

람다 + 익명 클래스의 조합은 일을 망쳐 놨습니다. (이해할 수 없었던) 문제를 만들었습니다.

Configurer를 @Configuration 클래스의 Beans로 선언하면 문제가 해결되었습니다.