我正在尝试使用 Operator 将 Keycloak 部署到 kubernetes 集群上。 我需要该应用程序存在于“/auth”而不是“/”上。 我正在使用 ingress-nginx 入口控制器并创建入口...
我一直在尝试在 keycloak 21.1 中实现这个自定义端点: EndopintFactory.java 文件 包org.keycloak.extension.authenticator; 导入 org.keycloak.Config; 导入 org.keycloak.models.
如何在 kubernetes 上为 keycloak 配置自定义主题
我想在 kubernetes 上的 keycloak 中为登录、注册和忘记密码页面配置自定义主题。 我在 kubernetes 上使用以下 url 和 keycloak 配置。 https://www.ke...
我在这里添加了我的 docker compose 文件以供参考 钥匙斗篷: 图片:quay.io/keycloak/keycloak:20.0.0 容器名称:钥匙斗篷 命令: [ “启动开发”, ...
Keycloak 20.x docker 映像无法启动(docker-compose)
我正在使用 docker swarm 并设置 keycloak 20 的新副本,但遇到了一些问题。 我一直在使用旧版本的 Keycloak,但似乎启动配置等已更改,
Keycloak infinispan 缓存配置在启动时更改,无需重建
我们正在 Kubernetes 上运行 Keycloak 21.1.2,使用 DNS_PING 和无头服务来发现集群中的节点。在构建 Keycloak 映像时,我们将缓存配置文件位置设置为...
Keycloak-js updateToken(minValidity) 需要澄清
我在Keycloak-js中阅读了很多该方法的示例,但没有对以下方法有明确的解释。 updateToken(minValidity: number): KeycloakPromise; 注:我是
升级到 Keycloak 22.0.0 时出错,但 21.1.2 工作正常
我尝试使用 Quay.io 映像从版本 20.0.0 升级到 Keycloak 22.0.0,但出现以下错误: 线程“main”中的异常 java.lang.reflect.InitationTargetException...
Spring Boot Keycloak docker-compose
当 Docker 容器中的 Spring Boot 应用程序尝试访问 Keycloak Docker 容器时,我遇到问题。我使用 docker-compose 创建了它们。以下是文件: 版本:“3.8”
我正在尝试设置一个有角度的钥匙锁。 如果在 keycloak 管理面板中我不选择设置“访问设置”,则一切正常 ” --> “根 URL”和“主页 URL”...
为什么将operator()作为std::function调用不起作用
考虑这个旨在收集字符串序列的小类: 班级问题_t期末 { 私人的: std::vector m_issues; 民众: constexpr void 运算符()(std::string&a...
我正在使用客户端创建一个新的 keycloak 用户。像这样的东西: keycloak.realm(领域) .users() 。创建用户); user 变量是一个 UserRepresentation 对象,我很...
我面临一个问题,MySQL 在一定的超时时间后关闭连接,而 Keycloak 随后遇到错误,因为它试图重用这些关闭的连接。 我该如何设置
我正在尝试使用 keycloak REST API 删除用户会话, 但获取 403 禁止 Http 状态代码。 我正在将令牌和 cookie 传递到标头中,如果我遗漏了某些内容,请告诉我...
第一次在这里提问,开门见山:我正在使用 Spring 开发一个连接到 Keycloak 实例的 API,出于安全原因,我需要每个端点接受访问令牌...
flink sql 作业抛出 no space left 异常,尽管有足够的空间可用
Flink 版本:1.17.1 环境:EKS Flink Kubernetes Operator Flink SQL 作业,rocksdb 后端的检查点状态小于 10GB。 我们将实例类型从 m5d.2xlarge 更改为 r5d.xl...
是否可以向仅支持Oauth2而不支持OIDC的Keycloak(v24.x)添加身份提供者? 我知道 oauth2 是一种授权而不是身份验证标准,但显然它们不是。 它增加了你...
React Keyckloak 在客户端身份验证切换为 ON 后获取 Token 时始终出现 401 响应
我正在使用 React 并尝试使用 ReactKeycloakWeb 和 Keycloak JS 将 Keycloak 与其集成。我添加了以下配置,通常工作正常: 常量 keycloakConfig = { 领域:“
这可能是一个愚蠢的问题,因为我对 C++ 中运算符的实现还很陌生...... 我已经使用新的运算符/表达式/关键字有一段时间了。但我刚刚注意到有一个fu...
我已经使用 vite 创建了 React 应用程序,并且已将该应用程序与 keycloak 连接,但我收到了 CORS 错误
我已经使用 vite 创建了 React 应用程序并将其与 keycloak 连接,但我收到以下错误 - localhost/:1 访问位于 'http://127.0.0.1:8080/realms/myrealm/protocol/... 的 XMLHttpRequest
如何在没有管理员帐户的情况下通过 REST 获取 Keycloak 用户
有没有一种方法可以通过 REST 获取 Keycloak 领域上的用户列表,而无需使用管理员帐户?也许可以从管理控制台分配某种角色?寻找任何想法。 现在我是你...
Keycloack - 通过密码 grantType 获取 accessToken - 需要 client_secret
作为 Keycloak 的新手,我尝试使用“密码”授权类型配置客户端。我知道在大多数情况下这不是首选解决方案。 我与客户端“
登录后,使用 angular-oauth2-oidc 时,hasValidAccessToken 始终为 true
我已经使用 Angular 12.2 实现了 angular-oauth-oidc (版本 12.1.0)。我使用 Keycloak 作为 SSO 登录没有问题,但我在库中遇到了奇怪的行为。 每次,之后...
AWS EKS OIDC 身份验证器在尝试初始化时返回 403
我希望尝试将 Keycloak 与 EKS 作为 OIDC 提供商集成,虽然我过去取得了成功,但目前我正在努力使用新配置,我不太满意...
给出以下设置: 具有领域角色“foo-admin”的用户 名为“foo”的客户端(已启用直接访问授予,公共) 客户端范围“some:scope”(可选客户端
使用 keycloak 提供程序从下一个身份验证注销不起作用
我有一个带有 next-auth 的 nextjs 应用程序来管理身份验证。 这是我的配置 .... 导出默认 NextAuth({ // 配置一个或多个身份验证提供者 提供者:[
当我使用正确的用户和通行证将 Spring 网关的数量水平缩放到 2 个实例后,Keycloak 给出了身份验证错误。怎么解决?
我对这个问题的预感是,由于现在有多个 Spring Gateway 实例,可能会导致会话冲突,您能否使所有实例都...
我正在开发一个小项目,并尝试将一些硬编码值用于内联汇编。为此,我使用模板。我创建了一个代码片段来显示我所看到的 #包括 我正在开发一个小项目,并尝试将一些硬编码值用于内联汇编。为此,我使用模板。我创建了一个代码片段来显示我所看到的 #include <iostream> template <size_t T> struct MyClass { size_t myValue = T; void doSomething() { size_t value = T; __asm { mov eax, [T] mov [value], eax } std::cout << value << std::endl; } }; int main() { auto o = new MyClass<999>(); o->doSomething(); return 0; } 事实证明,对于汇编代码,它试图使用数据段而不是“直接将数字粘贴到那里” ; 25 : { push ebp mov ebp, esp push ecx ; 26 : auto o = new MyClass<999>(); push 4 call ??2@YAPAXI@Z ; operator new add esp, 4 ; 14 : size_t value = T; mov DWORD PTR _value$2[ebp], 999 ; 000003e7H ; 26 : auto o = new MyClass<999>(); mov DWORD PTR [eax], 0 mov DWORD PTR [eax], 999 ; 000003e7H ; 15 : __asm ; 16 : { ; 17 : mov eax, [T] mov eax, DWORD PTR ds:0 ; 18 : mov [value], eax mov DWORD PTR _value$2[ebp], eax ; 19 : } ; 20 : std::cout << value << std::endl; 我正在使用 Visual Studio 2015。还有其他方法可以实现此目的吗? 啊,多么可爱又扭曲的问题啊! 我尝试使用 T 初始化 constexpr 变量。结果是相同的 - 从内存加载值。宏可用于将文字传递给内联汇编,但它们与模板不能很好地混合。 使用 T 在类中初始化枚举在理论上应该可行(https://msdn.microsoft.com/en-us/library/ydwz5zc6.aspx提到枚举可以在内联汇编中使用),但是在内联汇编使 Visual Studio 2015 编译器崩溃:-)。 似乎有效的是一个函数模板,它使用模板参数声明一个枚举,然后在内联程序集中使用该枚举。如果必须将其放在模板类中,则可以在类中实例化模板函数,如下所示: #include <iostream> template <size_t T> void dosomething() { enum { LOCALENUM = T }; size_t value = 0; __asm { mov eax, LOCALENUM mov[value], eax } std::cout << value << std::endl; } template <size_t T> struct MyClass { size_t myValue = T; void doSomething() { ::dosomething<T>(); } }; int main() { //dosomething<999>(); auto o = new MyClass<999>(); o->doSomething(); return 0; } 这会产生以下汇编代码: auto o = new MyClass<999>(); 001B1015 mov dword ptr [eax],0 001B101B mov dword ptr [eax],3E7h o->doSomething(); 001B1021 mov eax,3E7h <--- Victory! 001B1026 mov dword ptr [ebp-4],eax 001B1029 mov ecx,dword ptr [_imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A (01B2048h)] 001B102F push offset std::endl<char,std::char_traits<char> > (01B1050h) 001B1034 push dword ptr [ebp-4] 001B1037 call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (01B2044h)]
我正在尝试检查给定的键是否在地图中,但有些无法做到: typedef 映射::迭代器 mi; 地图米; m.insert(make_pair("f","++--")); 一对 我正在尝试检查给定的键是否在地图中,但有些做不到: typedef map<string,string>::iterator mi; map<string, string> m; m.insert(make_pair("f","++--")); pair<mi,mi> p = m.equal_range("f");//I'm not sure if equal_range does what I want cout << p.first;//I'm getting error here 那么我怎样才能打印p中的内容呢? 使用 map::find 和 map::end: if (m.find("f") == m.end()) { // not found } else { // found } 要检查映射中是否存在特定键,请通过以下方式之一使用 count 成员函数: m.count(key) > 0 m.count(key) == 1 m.count(key) != 0 map::find的文档说:“另一个成员函数map::count可用于仅检查特定键是否存在。” map::count的文档说:“因为地图容器中的所有元素都是唯一的,所以该函数只能返回1(如果找到该元素)或零(否则)。” 要通过您知道存在的键从映射中检索值,请使用 map::at: value = m.at(key) 与 map::operator[] 不同,如果指定的键不存在,map::at 不会在映射中创建新键。 C++20 为我们提供了 std::map::contains 来做到这一点。 #include <iostream> #include <string> #include <map> int main() { std::map<int, std::string> example = {{1, "One"}, {2, "Two"}, {3, "Three"}, {42, "Don\'t Panic!!!"}}; if(example.contains(42)) { std::cout << "Found\n"; } else { std::cout << "Not found\n"; } } 您可以使用.find(): map<string,string>::iterator i = m.find("f"); if (i == m.end()) { /* Not found */ } else { /* Found, i->first is f, i->second is ++-- */ } C++17 通过带有初始化器的 If 语句进一步简化了这一点。 这样你就可以鱼与熊掌兼得了。 if ( auto it{ m.find( "key" ) }; it != std::end( m ) ) { // Use `structured binding` to get the key // and value. const auto&[ key, value ] { *it }; // Grab either the key or value stored in the pair. // The key is stored in the 'first' variable and // the 'value' is stored in the second. const auto& mkey{ it->first }; const auto& mvalue{ it->second }; // That or just grab the entire pair pointed // to by the iterator. const auto& pair{ *it }; } else { // Key was not found.. } m.find == m.end() // not found 如果您想使用其他API,请找到m.count(c)>0 if (m.count("f")>0) cout << " is an element of m.\n"; else cout << " is not an element of m.\n"; 我想你想要map::find。如果 m.find("f") 等于 m.end(),则未找到密钥。否则,find 返回一个指向找到的元素的迭代器。 错误是因为p.first是一个迭代器,它不适用于流插入。将最后一行更改为 cout << (p.first)->first;。 p 是一对迭代器,p.first 是迭代器,p.first->first 是键字符串。 一张地图对于给定的键只能有一个元素,所以 equal_range 不是很有用。它是为映射定义的,因为它是为所有关联容器定义的,但它对于多重映射更有趣。 template <typename T, typename Key> bool key_exists(const T& container, const Key& key) { return (container.find(key) != std::end(container)); } 当然,如果你想变得更奇特,你可以随时模板化一个函数,该函数也采用已找到的函数和未找到的函数,如下所示: template <typename T, typename Key, typename FoundFunction, typename NotFoundFunction> void find_and_execute(const T& container, const Key& key, FoundFunction found_function, NotFoundFunction not_found_function) { auto& it = container.find(key); if (it != std::end(container)) { found_function(key, it->second); } else { not_found_function(key); } } 并像这样使用它: std::map<int, int> some_map; find_and_execute(some_map, 1, [](int key, int value){ std::cout << "key " << key << " found, value: " << value << std::endl; }, [](int key){ std::cout << "key " << key << " not found" << std::endl; }); 这样做的缺点是想出一个好名字,“find_and_execute”很尴尬,我想不出更好的名字...... map<string, string> m; 检查 key 是否存在,并返回出现次数(map 中为 0/1): int num = m.count("f"); if (num>0) { //found } else { // not found } 检查key是否存在,并返回迭代器: map<string,string>::iterator mi = m.find("f"); if(mi != m.end()) { //found //do something to mi. } else { // not found } 在你的问题中,由坏的operator<<过载引起的错误,因为p.first是map<string, string>,你无法打印出来。尝试这个: if(p.first != p.second) { cout << p.first->first << " " << p.first->second << endl; } 小心地将查找结果与地图“m”的结尾进行比较,因为所有答案都有 上面完成 地图::迭代器 i = m.find("f"); if (i == m.end()) { } else { } 您不应该尝试执行任何操作,例如如果迭代器 i 等于 m.end() 则打印键或值,否则会导致分段错误。 比较 std::map::find 和 std::map::count 的代码,我认为第一个可能会产生一些性能优势: const_iterator find(const key_type& _Keyval) const { // find an element in nonmutable sequence that matches _Keyval const_iterator _Where = lower_bound(_Keyval); // Here one looks only for lower bound return (_Where == end() || _DEBUG_LT_PRED(this->_Getcomp(), _Keyval, this->_Key(_Where._Mynode())) ? end() : _Where); } size_type count(const key_type& _Keyval) const { // count all elements that match _Keyval _Paircc _Ans = equal_range(_Keyval); // Here both lower and upper bounds are to be found, which is presumably slower. size_type _Num = 0; _Distance(_Ans.first, _Ans.second, _Num); return (_Num); } find() 和 contains() 都可以使用。根据文档。两种方法平均时间为常数,最坏情况下为线性时间。 我知道这个问题已经有一些很好的答案,但我认为我的解决方案值得分享。 它适用于 std::map 和 std::vector<std::pair<T, U>>,并且可从 C++11 开始使用。 template <typename ForwardIterator, typename Key> bool contains_key(ForwardIterator first, ForwardIterator last, Key const key) { using ValueType = typename std::iterator_traits<ForwardIterator>::value_type; auto search_result = std::find_if( first, last, [&key](ValueType const& item) { return item.first == key; } ); if (search_result == last) { return false; } else { return true; } } map <int , char>::iterator itr; for(itr = MyMap.begin() ; itr!= MyMap.end() ; itr++) { if (itr->second == 'c') { cout<<itr->first<<endl; } } 如果你想比较成对的地图,你可以使用这个方法: typedef map<double, double> TestMap; TestMap testMap; pair<map<double,double>::iterator,bool> controlMapValues; controlMapValues= testMap.insert(std::pair<double,double>(x,y)); if (controlMapValues.second == false ) { TestMap::iterator it; it = testMap.find(x); if (it->second == y) { cout<<"Given value is already exist in Map"<<endl; } } 这是一项有用的技术。