首页 > 其他分享 >如何从 Keycloak 的 keycloak-themes.jar 中提取原生主题并自定义设置

如何从 Keycloak 的 keycloak-themes.jar 中提取原生主题并自定义设置

时间:2025-01-11 11:33:45浏览次数:3  
标签:opt 自定义 主题 jar themes keycloak Keycloak

言简意赅的讲解keycloak-themes.jar解决的痛点

部署和自定义 Keycloak主题 时你可能遇到了没有原生主题代码的难点,后续在Keycloak官方项目中获取原生主题文件还是无法找到主题源码。
下面这篇文章将向你展示,在某些 Keycloak 发行版本或特定部署方式下,如果默认的 /opt/keycloak/themes 文件夹里并没有包含所有原生主题(或根本没有),那么如何从 keycloak-themes-{version}.jar 中获取这些原生主题,并将它们解压到正确的位置。


为什么需要从 JAR 中提取原生主题?

Keycloak 17+(基于 Quarkus 发行)的版本中,有时我们会发现位于 /opt/keycloak/themes 下的默认主题并不完整,甚至为空。这是因为部分主题资源可能已经被打包在 lib 目录下的 jar 文件中,而不会以明文形式直接出现在 /opt/keycloak/themes 里。如果你想对主题进行自定义、调试或学习,那么从这些 jar 中提取原生主题文件就成了必须要做的事情。


原生主题所在的文件位置

默认情况下,Keycloak 的原生主题会打包在 keycloak-themes-{version}.jar 文件里。该文件通常位于:

/opt/keycloak/lib/lib/main/keycloak-themes-{version}.jar

Keycloak原生主题位置

注意:

  1. 有些 Keycloak Docker 镜像或操作系统包版本,其目录结构可能略有差异,可能放在 /opt/keycloak/lib/ 下的其他子目录里。
  2. {version} 对应的是 Keycloak 的具体版本号,比如:keycloak-themes-22.0.5.jar

提取步骤

以下以在本地或在容器内操作为例,讲解如何进行提取。

步骤 1:进入 Keycloak 容器(如果是在容器化环境)

如果你是在 Docker/Kubernetes 容器中运行 Keycloak,需要先进入容器:

# Docker
docker exec -it <keycloak-container-name> /bin/bash

# 或者 Podman
podman exec -it <keycloak-container-name> /bin/bash

如果你的 Keycloak 是直接安装在操作系统上,可直接操作宿主机中的 /opt/keycloak/ 目录,无需此步骤。

步骤 2:定位 keycloak-themes-{version}.jar

通过 ls 命令找到对应的 themes jar:

cd /opt/keycloak/lib/lib/main
ls -l

在输出的文件列表中,你应当能看到类似 keycloak-themes-22.0.5.jar(版本号只是示例)的文件。

步骤 3:创建/确认 /opt/keycloak/themes 目录

如果你想把解压出来的主题放回到默认 Keycloak 主题文件夹中,确保 /opt/keycloak/themes 目录存在,否则创建它:

mkdir -p /opt/keycloak/themes

步骤 4:解压 Jar 文件

使用 unzip 或者 jar xf 命令,将原生主题解压到 /opt/keycloak/themes 目录下。例如:

unzip /opt/keycloak/lib/lib/main/keycloak-themes-22.0.5.jar -d /opt/keycloak/themes

或者:

cd /opt/keycloak/themes
jar xf /opt/keycloak/lib/lib/main/keycloak-themes-22.0.5.jar

解压完成后,你就可以在 /opt/keycloak/themes/ 看到 base, keycloak, rh-sso 等主题文件夹(具体目录名称依版本而异)。


配置并启用主题

在成功解压主题后,你可以通过以下方式指定你要使用的主题:

  1. 修改 standalone[-ha].xmlkeycloak.conf 等配置文件
    在 Quarkus 版 Keycloak 中,常见的配置选项是通过 keycloak.conf 或环境变量来进行。例如:

    # 如果你想使用自定义主题(比如 base),可以在 keycloak.conf 中添加
    quarkus.theme.type=keycloak
    quarkus.theme.dir=base
    
  2. 在 Admin Console 中指定
    登录 Keycloak Admin Console,进入 Realm Settings > Themes,将 Login Theme、Account Theme、Admin Console Theme 等切换为你想要启用的主题名称(比如 basekeycloak 等)。


小结

有时,在升级或安装新的 Keycloak 发行版本后,你可能发现原本在 /opt/keycloak/themes 中的主题文件缺失或不完整,这是因为官方在 Keycloak 17+ Quarkus 版本中将许多资源进行了打包。如果你打算对原生主题进行定制,或者只是在学习如何写 Keycloak 主题,那么可以按照本文介绍的方式,在 /opt/keycloak/lib/lib/main/keycloak-themes-{version}.jar 中手动解压出原生主题文件。

通过上述步骤,你就能拿到最原始、可修改的 Keycloak 主题文件,然后即可开始自由地定制登录页、账户管理界面或管理员控制台的样式与布局。


通过上述内容,你就已经基本理解了这个方法,基础用法我也都有展示。如果你能融会贯通,我相信你会很强

Best
Wenhao (楠博万)

标签:opt,自定义,主题,jar,themes,keycloak,Keycloak
From: https://blog.csdn.net/m0_70878103/article/details/144820885

相关文章

  • 自定义录制,解锁全部功能!
    屏幕录制在各个领域都有着广泛的应用,不仅能够有效记录重要信息,还能帮助用户回顾和分析过去的活动,无论是工作会议、在线课程还是游戏过程。通过录屏软件,用户可以轻松捕捉屏幕上的动态内容,生成视频文件,以便于后续查看和分享;分享一款专业的屏幕录制软件:ApowerREC(傲软录屏);......
  • 如何创建自定义输出解析器
    在某些情况下,您可能需要实现自定义解析器,以便将模型输出结构化为自定义格式。本文将介绍两种实现自定义解析器的方法:使用RunnableLambda或者RunnableGenerator,这是我们强烈推荐的方法;以及通过继承基础类实现解析器的方法,这种方法较为复杂。技术背景介绍输出解析器在AI......
  • uniapp - 实现精美全屏抽屉弹窗带动画过渡功能组件,从页面左侧或右侧弹出抽屉窗口带挤
    效果图在uni-app手机h5网页网站/支付宝微信小程序/安卓app/苹果app/nvue等(全平台兼容)开发中,实现uniapp抽屉弹框组件,从页面全屏侧滑弹出抽屉窗口,简单易用的Drawer抽屉插件,uniApp抽屉组件好看弹跳挤压出现动画过渡效果,适用于侧边隐藏时导航菜单、我的个人信息等场景,自定义......
  • 部落竞争与成员合作算法(CTCM)求解多个无人机协同路径规划(可以自定义无人机数量及起始点
    一、部落竞争与成员合作算法部落竞争与成员合作算法(Competitionoftribesandcooperationofmembersalgorithm,CTCM)由ChenZuyan等人于2024年提出的一种智能优化算法。该算法受古代部落之间竞争及其合作行为的启发而得。参考文献:[1]ZuyanChen,ShuaiLi,AmeerTamo......
  • go-zero使用自定义模板实现统一格式的 body 响应
    前提go环境的配置、goctl的安装、go-zero的基本使用默认都会需求go-zero框架中,默认使用goctl命令生成的代码并没有统一响应格式,现在使用自定义模板的方式实现统一响应格式:{"code":0,"msg":"OK","data":{}}步骤1、下载模板goctltemplateinit下载完......
  • Python Matplotlib 教程- Matplotlib 如何自定义样式
    PythonMatplotlib样式和自定义Matplotlib是一个强大的Python数据可视化库,提供丰富的绘图功能。在实际使用中,熟悉其样式和自定义技巧可以让你的图表更加专业和美观。本文将简要介绍Matplotlib样式和一些常用的自定义方法。1.设置全局样式Matplotlib提供了一些预设的样......
  • 拖动上传组件内部自定义组件,保留拖动上传
    遇到拖动上传组件内部自定义组件,保留拖动上传,其他上传方式取消(点击上传,有焦点回车上传)保留内容自定义组件1.这里举例vue2+antdesignvue1.x(上传组件)+elementui2.12.0(内部组件输入框)保留拖动上传,可支持输入。<a-upload-draggername="file":multiple="false"accept="imag......
  • 【JAVA编程】通过自定义注解与AOP防止接口重复提交实战
    引言在Web应用开发中,特别是在处理表单提交或API调用时,可能会遇到用户因网络延迟、按钮多次点击等原因导致的重复提交问题。为了解决这一问题,通常的做法是在前端禁用提交按钮,或者在后端使用唯一令牌(Token)机制来确保请求的唯一性。然而,这些方法往往需要针对每个可能的重复提交场景......
  • 全面解析 Keycloak 自定义主题:打造品牌化 OAuth 登录页面的终极指南
    言简意赅的讲解Keycloak主题解决的痛点之前给大家讲解了Keycloak一键登录后大家也解决了SSO登录的问题。这时候大家觉得Keycloak登录页太丑了,所以本篇文章讲讲如何让登录页好看。1.1提升品牌一致性在大型项目或企业环境中,登录页面是对外最直观的形象展现。Keycloak虽......
  • 普通的maven项目将main函数打包实现java -jar来运行
    一、创建一个maven项目假设groupId为org.example则在src\main\java目录下创建一个org包,在其下创建一个example包,然后创建我们打包后要执行java类MyThread.java二、在pom文件中添加以下build插件声明在<project>标签内添加<build><plugins><plugin><g......