中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

keycloak~登錄(lu)皮膚動態切換(huan)的嘗試

keycloak的登(deng)錄皮膚theme,可以設置(zhi)(zhi)領域全局(ju)的,或者每個客戶(hu)(hu)端進行單獨設置(zhi)(zhi),這(zhe)(zhe)種設計是沒有(you)(you)問(wen)題的,但有(you)(you)時,一(yi)個客戶(hu)(hu)端可能有(you)(you)多種主題,這(zhe)(zhe)時,你只能再加個客戶(hu)(hu)端,對應新的主題,但這(zhe)(zhe)樣不方便日后(hou)的統計,因為(wei)(wei)很多統計維度都是以client為(wei)(wei)基(ji)礎的,所(suo)以,我(wo)們需要在進入登(deng)錄頁(ye)時,讓開發(fa)人(ren)員轉(zhuan)具體的皮膚參數,然(ran)后(hou)動態切換皮膚,這(zhe)(zhe)個idea不錯。

域全局皮膚

客戶端個性皮膚

嘗試~自定義ThemeSelectorProvider失敗

這(zhe)個應(ying)該(gai)是(shi)keycloak不支(zhi)持(chi)多種皮膚(fu),因為它(ta)默(mo)認通過default皮膚(fu)渲(xuan)染(ran)的,咱們(men)添加的,雖然在spi中(zhong)注(zhu)冊成功了(le),但在實現中(zhong),并(bing)未應(ying)用。

/**
 * KC目前這個定義是未生效的,目前框架只支持默認的DefaultThemeSelectorProvider
 */
public class MyThemeSelectorProvider implements ThemeSelectorProvider {
  KeycloakSession session;

  public MyThemeSelectorProvider(KeycloakSession session) {
    this.session = session;
  }


  @Override
  public String getThemeName(Theme.Type type) {
    return type.name();
  }

  @Override
  public void close() {
  }
}

public class MyThemeSelectorProviderFactory implements ThemeSelectorProviderFactory {

  @Override
  public ThemeSelectorProvider create(KeycloakSession session) {
    return new MyThemeSelectorProvider(session);
  }

  @Override
  public void init(Config.Scope config) {
  }

  @Override
  public void postInit(KeycloakSessionFactory factory) {
  }

  @Override
  public void close() {
  }

  @Override
  public String getId() {
    return "MyThemeSelectorProvider";
  }
}

  • org.keycloak.theme.ThemeSelectorProviderFactory文件中注冊MyThemeSelectorProviderFactory

最終~還是修改了keycloak源碼

  • 修改org.keycloak.theme.DefaultThemeSelectorProvider文件getThemeName()方法,添加請求參數即可

最終的使用

  • //{keycloak}/auth/realms/{realm}/protocol/openid-connect/auth?theme=你的皮膚名&client_id=account&redirect_uri=&response_type=code&scope=openid
  • keycloak會根據路徑參數中theme的值,動態渲染登錄皮膚
posted @ 2024-05-10 17:42  張占嶺  閱讀(245)  評論(0)    收藏  舉報