我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Keycloak各种配置及API使用的方法是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Keycloak各种配置及API使用的方法是什么

这篇文章主要介绍了Keycloak各种配置及API使用的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Keycloak各种配置及API使用的方法是什么文章都会有所收获,下面我们一起来看看吧。

    1.创建client

    如果想要在登录时跳转到keycloak的登录页面,那么Access Type 使用confidential方式,这也是实现SSO功能必须的。

    Keycloak各种配置及API使用的方法是什么

    怎样设置redirect_url呢?

    必须与应用程序的地址保持一致,协议,域名(或者IP)与端口都要一致,不然会出现各种各样的错误。

    Keycloak各种配置及API使用的方法是什么

    例如下面的错误,应用程序的地址为: http://localhost/,但是未在client中配置正确的redirect_url,会出现下面的错误。

    只要添加一个新的redirect_url  "http://localhost/*",就能解决问题。

    Keycloak各种配置及API使用的方法是什么

    2.怎样拿到access token信息 

    2.1采用前端登录(例如angular应用)的情况

    通过Keycloak登录后(配置了nginx反向代理,实际的keycloak地址是http://127.0.0.1:8082/auth),会重定向到应用程序,并且在cookie中存储一个code值(Oauth3的授权码模式中的授权码)。

    Keycloak各种配置及API使用的方法是什么

    从cookie中获取到code值(授权码)之后,使用API获取access token https://127.0.0.1:8443/auth/realms/master/protocol/openid-connect/token

    发送Post请求,其payload是:

    Keycloak各种配置及API使用的方法是什么

    得到的response:

    {"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJNS1FBX0VtX3JVNGhLOVhqMG9qU0pMckRDZ25RRjdRam9MZ2JMOXRjQTQ4In0.eyJqdGkiOiIwZmNlNzgwMC1iZjM3LTRiN2EtOTY3OC00ZWNjOTBmMWE1MjIiLCJleHAiOjE2MTAzNTMwOTYsIm5iZiI6MCwiaWF0IjoxNjEwMzQ5NDk2LCJpc3MiOiJodHRwczovLzEyNy4wLjAuMTo4NDQzL2F1dGgvcmVhbG1zL21hc3RlciIsImF1ZCI6ImFjY291bnQiLCJzdWIiOiIyY2ZhZjlhOS0yYzA5LTQ3MjktODdjMC00MGM4YmZjM2M0NWEiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJjY3RmLWZyb250ZW5kLWNsaWVudCIsIm5vbmNlIjoiN2ZkNmFjZjQtMDZjNC00MTcyLThlNWEtMDg4YTdmZjIwYzFjIiwiYXV0aF90aW1lIjoxNjEwMzQ5NDk2LCJzZXNzaW9uX3N0YXRlIjoiZDU5NDY5YWQtZWFhOC00NjA0LWE3NGYtYWZmN2UxMTE2MGQ1IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyIqIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJvZmZsaW5lX2FjY2VzcyIsIlJPTEVfVklFV0VSIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6Im9wZW5pZCBwcm9maWxlIGVtYWlsIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJjY3RmX2FkbWluIn0.RK7HGRFtUUEOQ23I0E3GXN06R1NsRMOg3gO7IDz-rijBnDfpdfYbf53lsxRpwEsvbhF4gWKWfeeD4gEQA8u_IirHR48ZaKzvmQHRZSMSb8NA4eeDZ9HM5Olwk5DL9SW0BLK9_XGeyYRrJdjlvNNLWYOKLZEs2hiyNYODo0mPIR4j6vZixc011PGxMN4M7xe2JFbSru0F64oN1wuburbSXj_Sn7v7Amv93jq6uzKNTidEb8AlPQIjBnYGoPZydWrVX-UEjMpvD5b64PBtbomOIlgTBTVCruE0LHbk_PDUpZsinhNdqMnB0TFxg-h2vREcZ-4ReVRoyFKAVtY__FPPGw","expires_in":3600,"refresh_expires_in":1800,"refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0MGUyNDRmMS05YzkxLTQyMjctOWJhNy1iOTY5ZDYxZWIyYWMifQ.eyJqdGkiOiIyODQzZjA5MS0zMmQ2LTRlMTItODQxNy1lN2NiNjY4NGYyNGEiLCJleHAiOjE2MTAzNTEyOTYsIm5iZiI6MCwiaWF0IjoxNjEwMzQ5NDk2LCJpc3MiOiJodHRwczovLzEyNy4wLjAuMTo4NDQzL2F1dGgvcmVhbG1zL21hc3RlciIsImF1ZCI6Imh0dHBzOi8vMTI3LjAuMC4xOjg0NDMvYXV0aC9yZWFsbXMvbWFzdGVyIiwic3ViIjoiMmNmYWY5YTktMmMwOS00NzI5LTg3YzAtNDBjOGJmYzNjNDVhIiwidHlwIjoiUmVmcmVzaCIsImF6cCI6ImNjdGYtZnJvbnRlbmQtY2xpZW50Iiwibm9uY2UiOiI3ZmQ2YWNmNC0wNmM0LTQxNzItOGU1YS0wODhhN2ZmMjBjMWMiLCJhdXRoX3RpbWUiOjAsInNlc3Npb25fc3RhdGUiOiJkNTk0NjlhZC1lYWE4LTQ2MDQtYTc0Zi1hZmY3ZTExMTYwZDUiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJST0xFX1ZJRVdFUiIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBlbWFpbCJ9.qpoZB8OH-BFYBLhLZVde-NEYiOwUmHAT0d4xvBvYbWQ","token_type":"bearer","id_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJNS1FBX0VtX3JVNGhLOVhqMG9qU0pMckRDZ25RRjdRam9MZ2JMOXRjQTQ4In0.eyJqdGkiOiJhOWU3NTc5NS04NDQ4LTQ2OGYtYTA1Mi0xMmRiYTFkZTcyODIiLCJleHAiOjE2MTAzNTMwOTYsIm5iZiI6MCwiaWF0IjoxNjEwMzQ5NDk2LCJpc3MiOiJodHRwczovLzEyNy4wLjAuMTo4NDQzL2F1dGgvcmVhbG1zL21hc3RlciIsImF1ZCI6ImNjdGYtZnJvbnRlbmQtY2xpZW50Iiwic3ViIjoiMmNmYWY5YTktMmMwOS00NzI5LTg3YzAtNDBjOGJmYzNjNDVhIiwidHlwIjoiSUQiLCJhenAiOiJjY3RmLWZyb250ZW5kLWNsaWVudCIsIm5vbmNlIjoiN2ZkNmFjZjQtMDZjNC00MTcyLThlNWEtMDg4YTdmZjIwYzFjIiwiYXV0aF90aW1lIjoxNjEwMzQ5NDk2LCJzZXNzaW9uX3N0YXRlIjoiZDU5NDY5YWQtZWFhOC00NjA0LWE3NGYtYWZmN2UxMTE2MGQ1IiwiYWNyIjoiMSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwicHJlZmVycmVkX3VzZXJuYW1lIjoiY2N0Zl9hZG1pbiJ9.hShn2KIz2zaFkyCnmAbxy7Y1pbVXYMENM1ly8v6WmGMXjoL7G5jBDbmaY060Rlv2RMPu5WHAIuDYyCZGJzLAKPAOKd8ChwaFtMnmPjpRYw987zi3g7NiOWqJOlcZjEoMxODqfS0WwfNG8p4TgX9ILgjvfJpD5Mce_psX_44gULqX5DXUeijjredNyOrFRZp_2MFE7LYtuarJKeyKa8dQ1MUFAqUpZXFKMBvI09wsSIbB0w9ANxDB6pxunOLzijTlexsTJoF_Js5oOBilGSCnbG3s_QfLcfCw01GRo093OnaATpUq08lmlZ-zj3V_3DpVRaGmBLxhZUlv0dYHzlmzMQ","not-before-policy":0,"session_state":"d59469ad-eaa8-4604-a74f-aff7e11160d5","scope":"openid profile email"}

    在网站JSON Web Tokens - jwt.io中解析access token,发现能获取到realm role信息,以及资源访问权限 resource_access等信息。

    Keycloak各种配置及API使用的方法是什么

    2.2 使用keycloak API

    Keycloak提供了一个用于生成和刷新access token的REST API。

    首先,我们需要通过发送一个POST请求到这个URL来获取Keycloak的access token:

    http://localhost:8082/auth/realms/SpringBootKeycloak/protocol/openid-connect/token

    这个POST请求的body负载如下,格式是 x-www-form-urlencoded: 

    client_id:<your_client_id>username:<your_username>password:<your_password>grant_type:password

    在Reponse中,我们能够获得access_token跟refresh_token。

    access_token应该在每个对keycloak保护的资源的请求中使用,只需将它放在授权头中:

    headers: {    'Authorization': 'Bearer' + access_token}

    一旦access_token过期,那么我们可以使用refresh_token去刷新它,得到一个新的有效的access_token,也是使用上面的API,不过body信息要使用refresh_token.

    {    'client_id': 'your_client_id',    'refresh_token': refresh_token_from_previous_request,    'grant_type': 'refresh_token'}

    3.拿到用户role信息

    我们当然可以通过解析access token获取到role信息,但如果有的keycloak版本的access token中没有role信息,或者用户role信息在登录后有改变的情况下,我们应该使用其它的方式去重新获取role信息,现在有两种方式获取用户role信息。

    1.将role信息添加到userinfo

    给用户添加role信息,下图中给用户cctf_admin添加了 ROLE_VIEWER 这个Realm Role。

    Keycloak各种配置及API使用的方法是什么

    请求用户信息userinfo的API(GET请求):http://{server}/auth/realms/{realm}/protocol/openid-connect/userinfo (例如 http://localhost:8082/auth/realms/master/protocol/openid-connect/userinfo)

    将access token添加到header中。

    headers={    'Authorization': 'Bearer ' + accessToken,    'Content-Type': 'application/json'}

    发送请求后,得到下面的信息,发现没有拿到role信息,只拿到了基本信息,用户名cctf_admin,email信息等等。

    {"sub": "1b535469-2d7c-45ef-bdd5-4b9343b91f9b", "email_verified": false, "name": "bruce wang", "preferred_username": "cctf_admin", "given_name": "bruce", "family_name": "wang", "email": "4xxxxxxxx@qq.com"}

    怎样才能拿到role信息呢?可以通过在client中配置"User Realm Role" Mapper的方式。

    Keycloak各种配置及API使用的方法是什么

    添加了Mapper之后,再次发送请求发现,可以拿到role信息,问题解决。

    Keycloak各种配置及API使用的方法是什么

    2.直接通过API获取role信息

    如果用户没有添加"User Realm Role" Mapper,那么可以直接通过API来获取role信息。

    首先也要先获取userinfo, 从中拿到"sub"的值"1b535469-2d7c-45ef-bdd5-4b9343b91f9b"。

    {"sub": "1b535469-2d7c-45ef-bdd5-4b9343b91f9b", "email_verified": false, "name": "bruce wang", "preferred_username": "cctf_admin", "given_name": "bruce", "family_name": "wang", "email": "4xxxxxxxx@qq.com"}

    然后调用role API http://{server}/auth/admin/realms/{realm}/users/{user-uuid}/role-mappings/realm,其中的{user-uuid}是上面拿到的"sub"值。

    同样需要在header中加入access token。

    headers={'Authorization': 'Bearer ' + accessToken,'Content-Type': 'application/json'}

    发送请求之后,得到了403错误,没有权限,这个应该怎样解决?

    既然没有权限,那就加上权限,用户cctf_admin已经拥有了一个叫做ROLE_VIEWER的Realm Role,需要给这个Realm Role ROLE_VIEWER增加权限,起码要有一个叫做view-users的 Client Roles。

    Keycloak各种配置及API使用的方法是什么

    加入client role之后,可以得到role信息。

    ["ROLE_VIEWER", "offline_access", "uma_authorization"]

    4.Springboot集成Keycloak,SSO多个应用同时登出

    使用springboot集成keycloak的时候,按照keycloak官方文档Securing Applications and Services Guide,我们需要在自己的springboot 应用中添加使用Spring Boot Adapter JAR,然后通过springboot的application.properties提供keycloak相关的配置。

    如果使用SSO的方式打开了多个springboot应用,当其中一个应用登出后,那么其它应用是否应该同时被登出呢?大部分需求应该是要求同时登出的。

    经过Nginx反向代理后,不能同时登出,这个时候怎么办呢?

    通过设置"Admin URL",可以解决这个问题,使用其中任何一个springboot应用的地址,后面加上k_logout。

    Keycloak各种配置及API使用的方法是什么

    那么这是什么原理呢?

    JBoss keycloak在client设置中提供了一个管理url(即上面的Admin URL),用户可以通过这个属性进行设置,在登出推送事件或其他事件上做出反应,例如发生应用登出事件时,会触发Admin URL中配置的请求,Keycloak会对这个请求进行处理

        public boolean handleRequest() {        String requestUri = facade.getRequest().getURI();        log.debugv("adminRequest {0}", requestUri);        if (preflightCors()) {            return true;        }        if (requestUri.endsWith(AdapterConstants.K_LOGOUT)) {            if (!resolveDeployment()) return true;            handleLogout();            return true;        } else if (requestUri.endsWith(AdapterConstants.K_PUSH_NOT_BEFORE)) {            if (!resolveDeployment()) return true;            handlePushNotBefore();            return true;        } else if (requestUri.endsWith(AdapterConstants.K_TEST_AVAILABLE)) {            if (!resolveDeployment()) return true;            handleTestAvailable();            return true;        } else if (requestUri.endsWith(AdapterConstants.K_JWKS)) {            if (!resolveDeployment()) return true;            handleJwksRequest();            return true;        }        return false;    }

    可以看到如果请求的URI 如果以AdapterConstants.K_LOGOUT(即k_logout)结束,那么将会调用方法handleLogout();如果以其它字段结束,将会进行其它的操作。

        protected void handleLogout()  {        if (log.isTraceEnabled()) {            log.trace("K_LOGOUT sent");        }        try {            JWSInput token = verifyAdminRequest();            if (token == null) {                return;            }            LogoutAction action = JsonSerialization.readValue(token.getContent(), LogoutAction.class);            if (!validateAction(action)) return;            if (action.getAdapterSessionIds() != null) {                userSessionManagement.logoutHttpSessions(action.getAdapterSessionIds());            } else {                log.debugf("logout of all sessions for application '%s'", action.getResource());                if (action.getNotBefore() > deployment.getNotBefore()) {                    deployment.updateNotBefore(action.getNotBefore());                }                userSessionManagement.logoutAll();            }        } catch (Exception e) {            throw new RuntimeException(e);        }    }

    其中的userSessionManagement.logoutAll() 会将所有springboot应用登出。

    5.Keycloak外部User数据源

    用户可以在keycloak中直接创建新的User,也可以使用外部已有的User数据,例如mysql,LDAP中存储的用户信息,下面给出一个配置LDAP的例子。

    Keycloak各种配置及API使用的方法是什么

    Keycloak各种配置及API使用的方法是什么

    Keycloak各种配置及API使用的方法是什么

    配置完成后,就可以使用LDAP中的用户信息进行登录了。

    关于“Keycloak各种配置及API使用的方法是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Keycloak各种配置及API使用的方法是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    Keycloak各种配置及API使用的方法是什么

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    Keycloak各种配置及API使用的方法是什么

    这篇文章主要介绍了Keycloak各种配置及API使用的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Keycloak各种配置及API使用的方法是什么文章都会有所收获,下面我们一起来看看吧。1.创建c
    2023-07-05

    Keycloak各种配置及API的使用说明

    这篇文章主要介绍了Keycloak各种配置及API的使用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-09

    Spark SQL配置及使用的方法是什么

    本篇内容介绍了“Spark SQL配置及使用的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!XY个人记SparkSQL是spark
    2023-06-21

    React各种状态管理器的原理及使用方法是什么

    今天就跟大家聊聊有关React各种状态管理器的原理及使用方法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先我们要先知道什么是状态管理器,这玩意是干啥的?当我们在多个页面中使
    2023-06-25

    synaptics设置及使用的方法是什么

    要设置和使用Synaptics触摸板驱动程序,您可以按照以下步骤进行操作:1. 打开控制面板:右键单击开始菜单并选择“控制面板”选项。2. 在控制面板中,找到并打开“鼠标”或“硬件和声音”选项。3. 在“鼠标”或“硬件和声音”窗口中,找到并
    2023-09-21

    apache安装及配置的方法是什么

    要安装和配置Apache服务器,可按照以下步骤进行操作:1. 下载Apache软件包:访问Apache官方网站(https://httpd.apache.org/)并下载适用于您操作系统的最新的Apache软件包。2. 安装Apache软件
    2023-09-21

    jQuery安装及配置的方法是什么

    jQuery是一个JavaScript库,可以通过不同的方法进行安装和配置。1. 下载和引入:可以从jQuery官方网站上下载jQuery库文件,然后将其引入到你的HTML文件中。可以通过以下两种方式引入:- 通过本地文件引入:将下载的jQ
    2023-10-12

    ​MariaDB安装及配置的方法是什么

    该文章介绍了MariaDB的安装和配置方法,包括系统要求、软件包下载、安装步骤、数据库配置、远程访问配置、安全配置以及备份和恢复操作。文章包含了在Linux、macOS和Windows系统上的详细安装和配置说明,提供了一份全面的指南,帮助用户理解MariaDB的安装及其配置过程。
    ​MariaDB安装及配置的方法是什么
    2024-04-11

    ​SQLite安装及配置的方法是什么

    SQLite安装Linux和macOS:通过包管理器安装编译源码安装Windows:下载预构建二进制文件编译源码安装验证安装:sqlite3--version配置SQLite创建数据库文件创建表插入数据查询数据更新数据删除数据
    ​SQLite安装及配置的方法是什么
    2024-04-11

    AppFabric安装及配置的方法是什么

    要安装和配置AppFabric,可以按照以下步骤进行操作:1. 下载AppFabric安装程序:可以从Microsoft官网下载AppFabric安装程序。2. 运行安装程序:双击下载的安装程序,然后按照提示进行安装。3. 安装前准备:在进
    2023-09-26

    ​MongoDB安装及配置的方法是什么

    MongoDB安装下载MongoDB安装包并安装。创建系统用户、数据目录、日志目录。编辑配置文件并指定数据和日志路径、启用日志记录、绑定IP地址、启用身份验证。启动MongoDB服务,验证安装。MongoDB配置启用复制、优化性能、保护数据、集成监控等可选配置。
    ​MongoDB安装及配置的方法是什么
    2024-04-11

    各开发语言DNS缓存配置的方法是什么

    这篇文章主要介绍了各开发语言DNS缓存配置的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇各开发语言DNS缓存配置的方法是什么文章都会有所收获,下面我们一起来看看吧。一、背景在计算机领域,涉及性能优化
    2023-07-05

    MyBatis配置与CRUD使用的方法是什么

    本篇内容主要讲解“MyBatis配置与CRUD使用的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MyBatis配置与CRUD使用的方法是什么”吧!namespace:命名空间 必须绑
    2023-07-05

    ubuntu redis安装及配置的方法是什么

    要安装和配置Redis在Ubuntu上,您可以按照以下步骤操作:更新系统软件包列表:sudo apt update安装Redis:sudo apt install redis-server当安装完成后,Redis将自动启动,您可以使用以下命
    ubuntu redis安装及配置的方法是什么
    2024-04-09

    c++ cmake调试及配置的方法是什么

    在C++中使用CMake进行调试和配置主要有以下几个步骤:1. 安装CMake:首先需要安装CMake工具,可以从CMake官网下载并安装。2. 创建CMakeLists.txt文件:在项目的根目录下创建一个名为CMakeLists.txt
    2023-10-18

    Java用Gradle配置compile及implementation和api的区别是什么

    今天小编给大家分享一下Java用Gradle配置compile及implementation和api的区别是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有
    2023-07-02

    CentOS 6.4安装及配置的方法是什么

    以下是CentOS 6.4的安装及配置方法:1. 下载CentOS 6.4的ISO文件:从CentOS官方网站或镜像站点下载CentOS 6.4的ISO文件。2. 制作安装介质:将ISO文件刻录成光盘或创建一个启动盘。3. 启动计算机:将光
    2023-09-22

    ChatGPT介绍及Java API调用的方法是什么

    本篇内容介绍了“ChatGPT介绍及Java API调用的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ChatGPT的基本介绍C
    2023-07-05

    设置BFC功能及使用的方法是什么

    这篇文章主要讲解了“设置BFC功能及使用的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“设置BFC功能及使用的方法是什么”吧!首先BFC是啥?官方描述:块格式化上下文(Block
    2023-07-05

    SQL SERVER 2000安装及配置的方法是什么

    SQL Server 2000的安装和配置方法如下:1. 下载SQL Server 2000的安装文件,可以从官方网站或其他可信来源获取。2. 运行安装程序,选择“安装”选项。3. 阅读并接受许可协议。4. 选择安装类型,通常选择“完整安装
    2023-08-16

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录