首页 > 其他分享 >keycloak~登录皮肤动态切换的尝试

keycloak~登录皮肤动态切换的尝试

时间:2024-05-10 17:57:45浏览次数:13  
标签:登录 皮肤 theme session 切换 Override public keycloak

keycloak的登录皮肤theme,可以设置领域全局的,或者每个客户端进行单独设置,这种设计是没有问题的,但有时,一个客户端可能有多种主题,这时,你只能再加个客户端,对应新的主题,但这样不方便日后的统计,因为很多统计维度都是以client为基础的,所以,我们需要在进入登录页时,让开发人员转具体的皮肤参数,然后动态切换皮肤,这个idea不错。

域全局皮肤

客户端个性皮肤

尝试~自定义ThemeSelectorProvider失败

这个应该是keycloak不支持多种皮肤,因为它默认通过default皮肤渲染的,咱们添加的,虽然在spi中注册成功了,但在实现中,并未应用。

/**
 * 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()方法,添加请求参数即可

最终的使用

  • https://{keycloak}/auth/realms/{realm}/protocol/openid-connect/auth?theme=你的皮肤名&client_id=account&redirect_uri=&response_type=code&scope=openid
  • keycloak会根据路径参数中theme的值,动态渲染登录皮肤

标签:登录,皮肤,theme,session,切换,Override,public,keycloak
From: https://www.cnblogs.com/lori/p/18184993

相关文章

  • linux VIP 自动切换虚拟IP
    脚本内容如下#!/bin/bashset-oxtracePGCANDIDATES=(192.168.0.92192.168.0.93192.168.0.94192.168.0.95)#HOSTNAME=`hostname-i`VIP=192.168.0.110GW=192.168.1.1DEVICE=enp0s3STEP1="RemovetheVIPonallnodes"STEP2="Checkifvipstillonl......
  • sso-单点登录
    单点登录项目组成基于spring-boot-2.1.8.RELEASE,使用redis完成完成session记录。sso-basesso-serversso-client1sso-client2sso-baseTokenFilter:拦截获取是否登录,并获取登录用户设置到线程变量中TokenUtil:从redis获取指定key判断是否登录,以及登录用户;写入sessio......
  • CSDN复制登录复制问题
    不能复制主要有两个问题,第一个问题是选中问题,第二个问题主要指copy也就是复制时会弹出登录页面1.解决选中问题:按F12打开html代码=》上边栏点击  </>元素 ->head->第四个style->右键,删除元素 2. 第二个问题主要指copy也就是复制时会弹出登录页面在不能......
  • [鸟哥私房菜]4.首次登录与在线求助
    第4章首次登录与在线求助4.1.3XWindow与命令行模式的切换通常我们称命令行界面为终端界面、Terminal或Console。Linux默认的情况下会提供六个终端(Terminal)来让用户登录,切换的方式为使用:[Ctrl]+[Alt]+[F1]~[F6]的组合按钮。其中[Ctrl]+[Alt]+[F1]为图形用户界......
  • OSX上管理多个版本的Nodejs,并且随意切换
    Nodejs的项目经常Node自身的版本不同而无法运行,如果每次都选择卸载掉一个版本的Nodejs再安装另外一个版本的Nodejs,会很费劲,通过如下命令切换。例如:#Forexample#Installmainnodeversion18$brewinstallnode@18#Addthemainversionto~/.zshrctomakestarte......
  • UIOTOS前端零代码应用 蓝图连线+嵌套封装 实现MQTT输入0、1切换门禁开和关
    目标通过连线+嵌套封装,实现MQTT数据推送前端控制门禁开关最终效果实现过程步骤1:新建一个页面,在工具函数input输入两个门禁的开关图标地址,再通过连线和解析实现输0、1切换图标。 步骤2:再插入图片按钮,通过连线和解析,把工具函数的输出传递给图片按钮组件的path属性。 步骤......
  • uniapp+vue H5页面实现微信公众号授权登录
    <template><viewclass="my-userinfo-container"><!--头像和昵称区域--><viewclass="top-box"><image:src="form.headimgurl"class="avatar"></image>......
  • 登录功能
    整体思路设置欢迎页:设置完欢迎页之后,tomcat启动后会自动跳转到欢迎页而不是index.jsp登录的整体步骤:已经拥有前端页面:login.jsp,登录成功,跳转到业务主页面,登录失败输出提示信息,回到登录页面编写Dao层:接口和实现类,它的作用是从数据库中获取登录的用户//通过userCod......
  • C#winform实现通过点击Button来切换不同的界面
    C#winform实现通过点击Button来切换不同的界面实现目标:点击左边菜单栏里面的Button实现右边区域切换不同界面。步骤:1.界面布局由于实现目标需要用到容器控件,所以需要选择合适的容器控件来进行左右区域布局。常用的容器控件有:Panel,FlowLayoutPanel,GroupBox,TabControl,SplitConta......
  • python+selenium+excel自动登录,自动填写网页
    经常有些网页要登录,然后频繁填写一些重复的内容,本文暂只考虑不需要验证码的情况,可以通过selenium模拟用户行为在页面操作,用excel拖出相似内容,用xlrd读取并填写到网页中。导入相关包fromseleniumimportwebdriverimportosimportxlrdimportxlwtimportjsonimportreq......