Ich verwende Spring-Boot-Adapter und Keycloak-Spring-Boot-Adapter, um Multi-Tenancy durchzuführen, wo ich auf die Seite mit einem IP-und Domain-Namen zugreifen kann. Aber wenn ich Gradlew-Skript ausführen, scheint es, dass diese Bean nicht erkannt wurde keine Änderungen passiert ist. selbst nachdem ich einen logger eingebaut habe, wird das log nicht gedruckt, also nehme ich an, dass diese datei überhaupt nicht gelesen wird. Fehle ich etwas? oder gibt es Implementierungen, die ich für Multitenancy verwenden kann. Vielen Dank.Multitenancy mit Keycloak und 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;
}
}
}
Mein 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
ja es funktioniert! Vielen Dank – James