
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
这是一个简单的CAS服务器模拟工具,适用于测试依赖CAS的应用,无需执行任何真实认证。
此模拟CAS服务器未配置用户,允许任何用户名等于密码的凭据。例如,输入用户名为"john"且密码为"john"将成功认证该用户。
Docker Hub配置为对该仓库的所有代码推送执行自动构建。镜像可在 https://hub.docker.com/r/soulwing/cas-mock-server 获取。
docker container run -dp 8080:8080 soulwing/cas-mock-server
提供了Dockerfile以便轻松运行模拟服务器。Docker镜像包含Tomcat 8服务器,并将模拟服务器部署在服务器根目录。构建时,只需使用Docker构建:
docker image build -t cas-mock-server .
构建完成后,可使用以下命令启动Docker容器:
docker container run -dp 8080:8080 cas-mock-server
运行后,可访问 http://localhost:8080/cas/login?service=http://localhost 查看CAS协议的实际效果。显然,您需要连接真实服务,但这至少能显示其正常工作。
大多数CAS 3.0提供者能够释放进一步描述已认证用户的属性。此模拟CAS服务器内置了几种属性数据提供者。
最简单的属性提供者是JSON属性提供者。此提供者从URL读取JSON对象,该对象描述要为用户包含的属性。
以下是一个示例:
json{ "DEFAULT": { "attributes": { "affiliation": "EMPLOYEE", "groupMembership": "valid-user" } }, "fletcher": { "inherit": "DEFAULT", "attributes": { "uid": 1, "displayName": "Jordan Fletcher", "groupMembership": [ "admin", "power-user" ] } } }
JSON对象包含对应于用户登录名的键,每个用户对象包含一个attributes对象,其键和值是要为用户释放的属性。为避免文件中的重复,您可以定义一个用户对象(此处为DEFAULT对象),其中包含要由其他用户继承的属性。用户的inherit属性指定要继承其属性的用户的登录名。
要使用JSON属性提供者,只需指定ATTRIBUTES_JSON_URL环境变量,作为指向要加载的JSON对象的URL。Java的HttpURLConnection支持的任何URL均受支持。
JDBC属性提供者使用JDBC从SQL数据库读取属性。该提供者假设可以使用用户的登录名作为查询参数,将用户的属性读取为查询结果行。此外,它支持为单个多值属性(例如组成员身份)读取值,作为使用用户登录名作为查询参数的单列值行。
您可以通过指定多个环境变量来配置JDBC属性提供者:
ATTRIBUTES_JDBC_URL - 数据库的完整JDBC URLATTRIBUTES_JDBC_DRIVER -(可选)JDBC驱动程序的全限定类名;主要用于Tomcat,因为Tomcat不会自动注册JDBC驱动程序ATTRIBUTES_JDBC_USERNAME -(可选)数据库用户名ATTRIBUTES_JDBC_PASSWORD -(可选)数据库密码ATTRIBUTES_JDBC_USER_QUERY - SQL查询,使用单个参数占位符(?)返回属性,该占位符将使用用户的登录名填充ATTRIBUTES_JDBC_USER_COLUMNS - 逗号分隔的属性名称列表,对应结果中的位置列ATTRIBUTES_JDBC_GROUP_QUERY -(可选)SQL查询,使用单个参数占位符(?)返回单个多值属性(如组成员身份)的值,该占位符将使用用户的登录名填充ATTRIBUTES_JDBC_GROUP_COLUMNS - 逗号分隔的属性名称列表,对应组查询结果中的位置列重要提示: 要使用JDBC属性提供者,您还必须安排将JDBC驱动程序包含在模拟CAS服务器的类路径中。如果使用PostgreSQL或MySQL作为数据库,CAS服务器捆绑了这些驱动程序的较新版本。如果需要其他驱动程序,并且使用基于Tomcat的模拟CAS服务器容器镜像,您可以创建基于模拟CAS服务器镜像的自定义容器镜像,将JDBC驱动程序复制到Tomcat的
lib/目录中。
例如,假设您的数据库有一个app_user表,用于描述每个用户:
postgresqlCREATE TABLE app_user ( id BIGINT PRIMARY KEY, name VARCHAR(255) UNIQUE NOT NULL, display_name VARCHAR(255), affiliation VARCHAR(255) )
假设此表的列对应于CAS属性uid、loginName、displayName和affiliation。
使用上面的示例表,ATTRIBUTES_JDBC_USER_QUERY环境变量的查询可以编写如下:
sqlSELECT uid, name, display_name, affiliation FROM docker.xuanyuan.run/app_user WHERE name = ?
此示例的ATTRIBUTES_JDBC_USER_COLUMNS变量值为uid,loginName,displayName,affiliation。
假设您还想包含表示用户组成员身份的单个多值属性,并且组成员身份在两个表中表示。在此示例中,第一个表定义可用组:
sqlCREATE TABLE app_group ( id BIGINT PRIMARY KEY, name VARCHAR(255) UNIQUE NOT NULL )
此表定义组成员:
sqlCREATE TABLE app_group_member ( group_id BIGINT NOT NULL REFERENCES app_group (id), user_id BIGINT NOT NULL REFERENCES app_user (id))
您可以通过将ATTRIBUTES_JDBC_GROUP_QUERY变量指定为以下查询来包含多值groupMembership属性:
sqlSELECT g.name FROM app_group g INNER JOIN app_group_member gm ON gm.group_id = g.id INNER JOIN app_user u ON gm.user_id = u.id WHERE u.name = ?
此外,将ATTRIBUTES_JDBC_GROUP_COLUMNS变量指定为groupMembership。
如果内置属性提供者均不满足您的需求,您可以提供自己的属性提供者。属性提供者通过Java ServiceLoader机制定位。您可以通过编写实现AttributesServiceProvider接口的提供者类,并将其放入包含META-INF/services中服务提供者规范的JAR文件来创建自己的提供者。有关创建服务提供者的详细信息,请参见https://docs.oracle.com/javase/7/docs/api/java/util/ServiceLoader.html%E6%96%87%E6%A1%A3%E3%80%82
创建提供者后,必须安排使其在模拟CAS服务器的类路径上可用。假设您使用在Tomcat上运行的模拟CAS服务器变体,您可以通过创建基于cas-mock-server镜像的自定义容器镜像,并将提供者的JAR文件复制到Tomcat的lib/目录中来实现。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务