1

저는 IP와 도메인 이름을 사용하여 페이지에 액세스 할 수있는 다중 부팅을 수행하기 위해 스프링 부팅 어댑터와 키 클로크 스프링 부팅 어댑터를 사용하고 있습니다. 그러나 gradlew 스크립트를 실행하면이 bean이 변경되지 않았 음을 알 수 없습니다. 로거가 포함 된 후에도 로그가 인쇄되지 않으므로이 파일을 전혀 읽지 않는다고 가정합니다. 내가 놓친 게 있니? 또는 멀티 테넌시에 사용할 수있는 구현이 있는지 확인하십시오. 감사.Keycloak과 SpringBoot를 사용한 멀티 테넌시

KeycloakTomcatContextCustomizer이

@Component 
public class KeycloakTomcatContextCustomizer implements TomcatContextCustomizer 
{ 
    private static final Logger logger = LoggerFactory.getLogger(KeycloakTomcatContextCustomizerBean.class); 

    @Override 
    public void customize(Context context) 
    { 
     LoginConfig loginConfig = new LoginConfig(); 
     loginConfig.setAuthMethod("--KEYCLOAK--"); 
     context.setLoginConfig(loginConfig); 
     context.addSecurityRole("myproject"); 

     SecurityConstraint constraint = new SecurityConstraint(); 
     constraint.addAuthRole("myproject"); 

     SecurityCollection collection = new SecurityCollection(); 
     collection.addPattern("/contexts"); 
     constraint.addCollection(collection); 

     context.addConstraint(constraint); 

     context.addParameter("keycloak.config.resolver", HostBasedKeycloakResolver.class.getName()); 
    } 

    public class HostBasedKeycloakResolver extends KeycloakSpringBootConfigResolver 
    { 
     private KeycloakDeployment keycloakDeployment; 

     @Autowired 
     private AdapterConfig adapterConfig; 

     @Override 
     public KeycloakDeployment resolve(OIDCHttpFacade.Request request) { 
     if (keycloakDeployment != null) { 
      return keycloakDeployment; 
     } 

      //get the host part here 

     //build keycloakdeployment 
      keycloakDeployment = KeycloakDeploymentBuilder.build(adapterConfig); 
      adapterConfig.setAuthServerUrl("https://"+host+"/auth"); 
      System.out.println(adapterConfig.getAuthServerUrl()); 
      return keycloakDeployment; 
     } 
    } 

}

당신이 달성하려고하는 것과 유사한 경우가 발생했습니다

keycloak: 
    cors: true 
    realm: Boot-Project 
    realmKey: AARjANBgkqhkiYUitdhjnCAQ8AMIIBCgKCAQEArOS/TTjkgjdoiQ7F6m5x206lJ+K9VBpEjkjrignxIdH7pJDWv9UMg2CL1q3Tfkjg/YdjkljgkbsnqrSzjBcIU5HQ2AQLkRm2eCPuLIB23d2VS3hZGqvbyqN42hbk/oRhloS0tS2/frq4fIeU53KQiRPPiBt1IEO7DINoDUXdyOWS7g/rSrMkjjUm9SohXdv8u3aB+mnI8gNwEag17Cj+wqoc1smPj5jb/8Ab3MynQHv4ekgXYFPI5BEQSXXflBLbL2kjqR2xP8y8XTsOz58XLyWBydjN2R37uds9D2TqipU3tdc286b276RhNCwIDAQAB 
    auth-server-url: https://${__AUTH_VM__:localhost}/auth 
    ssl-required: none 
    resource: myproject 
    bearer-only: true 
    public-client: false 
    credentials: 
    secret: ls5f7c3g-d045-444f-8234-6cth6970726y 
    securityConstraints[0]: 
    securityCollections[0]: 
     name: secured context api and app 
     authRoles: 
     - commongui 
     patterns: 
     - /contexts/* 
     - /config.json 

답변

0

내 application.yml, 당신의 코드가 보인다 괜찮아. 다음은 당신을 도울 수 있습니다

1) 멀티 테넌시 (multi-tenancy) 구현하는 방법에 대한 keycloak에서 공식 문서

: 거기에서 http://www.keycloak.org/docs/3.2/securing_apps/topics/oidc/java/multi-tenancy.html

, 그것은 지적되고 당신은 같이 KeycloackConfigResolver 사용하는 구성해야하지만, 불행히도 있음 이 글을 쓰는 시점, 나는이 티켓에 발견 봄 부팅에 그것을 할 더 편리한 방법이 없습니다 :

2) 봄 부팅 어댑터에 대한 사용자 정의 KeycloakConfigResolver : https://issues.jboss.org/browse/KEYCLOAK-4139?_sscc=t

3) Afte r # 1과 # 2에서 일어날 수있는 일은 스프링 구성이 어떻게 해결되는지에 따라 구현 클래스를 재정의 할 수 있다는 것입니다. 확장하고있는 클래스에서 몇 가지 메소드를 오버라이드 (override)하고, 로깅을 추가 한 다음, 실행 중에 Spring 로그를 확인하십시오. "Bean에 대한 Bean 정의 대체 ... 다른 정의와 :와 ... ... 교체 ")

4) 구현 클래스는 예를 들어 오버라이드 (override)되지 않도록 당해 클래스를 제외보십시오 : @SpringBootApplication (제외를 = {KeycloakSpringBootConfiguration.class})

희망 사항은 도움이되거나 몇 가지 아이디어를 제공합니다.

감사합니다, 선생님. JZ

+0

예! 작동합니다. 감사 – James