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

}

マイapplication.yml

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

私はあなたが達成しようとしているものと似たようなケースに遭遇してきた、あなたのコードは思わはい。次はあなたを助けるかもしれない:

1)公式ドキュメントを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では、Springの設定がどのように解決されているかによって、Springが実装クラスをオーバーライドしている可能性があります。拡張しているクラスからいくつかのメソッドをオーバーライドし、いくつかのロギングを追加してから、実行中にSpringログをチェックしてみてください(このようなものが表示されます)... BeanのBean定義のオーバーライド...置き換え...)」

4)実装クラスがオーバーライドされないように関連するクラスを除外してください。例: @SpringBootApplication(exclude = {KeycloakSpringBootConfiguration.class})

希望するか、いくつかのアイデアがあります。

よろしくお願いします。 JZ

+0

はい、動作します。ありがとう – James

関連する問題