sso集成shiro_Keycloak SSO集成到jBPM和Drools Workbench中

sso集成shiro

介绍

单一登录(SSO)和相关令牌交换机制正在成为Web上不同环境中身份验证和授权的最常见方案,尤其是在迁移到云中时。

本文讨论了Keycloak与jBPM或Drools应用程序的集成,以便使用Keycloak上提供的所有功能。 Keycloak是用于浏览器应用程序和RESTful Web服务的集成SSO和IDM。 在Keycloak的主页上进一步了解它。

与Keycloak集成的结果具有许多优势,例如:

  • 为包括jBPM和Drools工作台在内的不同客户提供集成的SSO和IDM环境
  • 社交登录–使用您的Facebook,Google,Linkedin等帐户
  • 用户会话管理
  • 以及更多…

下一节将介绍Keycloak的以下集成点:

  • 通过Keycloak服务器进行工作台身份验证 :它基本上包括通过Keycloak SSO保护Web客户端和远程服务客户端。 因此,无论是Web界面还是远程服务使用者(无论是用户还是服务)都将通过KC进行身份验证。
  • 通过Keycloak服务器执行服务器认证 :包括保护执行服务器提供的远程服务(因为它不提供Web界面)。 任何远程服务使用者(无论是用户还是服务)都将通过KC进行身份验证。
  • 消费远程服务 :本节描述第三方客户端如何使用由Workbench和Execution Server提供的远程服务端点。

情境

将下图视为本文示例的环境:

KeyCloak +方法

示例场景

Keycloak是一个独立的过程,可提供远程身份验证,授权和管理服务,这些服务可能会被一个或多个jBPM应用程序通过网络使用。

考虑以下用于构建此环境的主要步骤:

  • 安装和设置Keycloak服务器
  • 为此示例创建和设置领域-配置领域的客户端,用户和角色
  • 安装和设置SSO客户端适配器和jBPM应用程序

笔记:

  • 最终的环境和本文的不同配置均基于jBPM(KIE)工作台,但是相同的环境也可以应用于KIE Drools工作台。
  • 本示例使用最新的6.4.0.CR2社区发行版

步骤1 –安装和设置Keycloak服务器

Keycloak提供了广泛的文档以及有关在不同环境中进行安装的几篇文章。 本节介绍了用于构建示例的集成环境的最小设置。 如果需要更多信息,请参考Keycloak文档 。

以下是最小化Keycloak安装和设置的步骤:

  1. 从下载部分下载最新版本的Keycloak。 本示例基于Keycloak 1.9.0.Final。
  2. 将下载的Keycloak发行版解压缩到一个文件夹中,我们将其称为$KC_HOME
  3. 运行KC服务器–此示例基于在同一主机上同时运行Keycloak和jBPM。 为了避免端口冲突,可以将Keycloak服务器的端口偏移量用作:
    $KC_HOME/bin/standalone.sh -Djboss.socket.binding.port-offset=100
  4. 创建Keycloak的管理用户–执行以下命令以创建此示例的管理员用户:
    $KC_HOME/bin/add-user.sh -r master -u 'admin' -p 'admin'

Keycloak管理控制台将位于http:// localhost:8180 / auth / admin (使用admin / admin作为登录凭据)。

第2步–创建并设置演示领域

安全领域用于限制对不同应用程序资源的访问。

Keycloak服务器运行之后,下一步就是创建领域。 该领域将为jBPM应用程序提供不同的用户,角色,会话等。

Keycloak提供了几个领域创建和管理的示例 ,从官方示例到带有更多示例的不同文章。

您可以手动创建领域,也可以仅导入给定的json文件。

逐步创建领域

请按照以下步骤操作,以创建本文稍后使用的演示领域:

  1. 转到Keycloak 管理控制台 ,然后单击“ 添加领域”按钮。 给它命名为demo
  2. 转到“客户端”部分(从管理控制台主菜单),然后为演示领域创建一个新客户端:
    • 客户编号: kie
    • 客户端协议: openid-connect
    • 访问类型: 机密
    • 根URL: http:// localhost:8080
    • 基本网址: /kie-wb-6.4.0.Final
    • 重定向URI: /kie-wb-6.4.0.Final/*

生成的kie客户端设置屏幕:

KIE客户端的设置

KIE客户端的设置

注意 :如您在上述设置中所看到的,它被认为是应用程序上下文路径的值kie-wb-6.4.0.Final 。 如果将jbpm应用程序部署在其他上下文路径,主机或端口上,请在此处使用您的具体设置。

能够使用jBPM工作台中的演示领域的最后一步是创建应用程序的用户和角色:

  • 转到“角色”部分,并创建角色adminkiemgmtrest-all
  • 转到“用户”部分并创建管理员用户。 在“凭据”选项卡中将密码设置为“ password”,然后取消设置临时开关。
  • 在“用户”部分中,导航到“ 角色映射”选项卡,然后将admin, kiegmmtrest-all角色分配给admin用户
admin_user_roles

管理员用户的角色映射

导入演示领域

两者都导入:

  • 演示领域–单击“ 添加领域”并使用demo-realm.json文件
  • 领域用户–导入演示领域后,在主菜单中单击“ 导入” ,然后使用demo-users-0.json文件作为导入源

此时,Keycloak服务器正在主机上运行,​​并使用最小配置集进行设置。 让我们转到jBPM工作台设置。

步骤3 –安装和设置jBPM工作台

对于本教程,让我们将Wildfly用作jBPM工作台的应用程序服务器,就像jBPM安装程序默认情况下那样。

让我们假设,在运行jBPM安装程序之后,将$ JBPM_HOME作为已部署应用程序的Wildfly服务器的根路径。

步骤3.1 –安装KC适配器

为了使用jBPM应用程序中的Keycloak身份验证和授权模块,必须在$ JBPM_HOME的服务器上安装用于Wildfly的Keycloak适配器 。 Keycloak开箱即用为不同容器提供了多个适配器,如果您正在使用另一个容器或需要使用另一个适配器,请查看Keycloak文档中的适配器配置 。 以下是安装和设置Wildfly 8.2.x适配器的步骤:

  1. 从此处下载适配器
  2. 执行以下命令:
    cd $JBPM_HOME/
    unzip keycloak-wf8-adapter-dist.zip // Install the KC client adaptercd $JBPM_HOME/bin
    ./standalone.sh -c standalone-full.xml // Setup the KC client adapter.// ** Once server is up, open a new command line terminal and run:
    cd $JBPM_HOME/bin
    ./jboss-cli.sh -c --file=adapter-install.cli

步骤3.2 –配置KC适配器

将KC适配器安装到Wildfly中后,下一步是配置适配器,以指定不同的设置,例如身份验证服务器的位置,要使用的领域等。

Keycloak提供了两种配置适配器的方法:

  • 每个WAR配置
  • 通过Keycloak子系统

在此示例中,我们使用第二个选项,使用Keycloak子系统,因此我们的WAR不受此类设置的影响。 如果要使用per WAR方法,请在此处查看 。

编辑配置文件$ JBPM_HOME / standalone / configuration / standalone-full.xml并找到子系统配置部分。 添加以下内容:

<subsystem xmlns="urn:jboss:domain:keycloak:1.1"><secure-deployment name="kie-wb-6.4.0-Final.war"><realm>demo</realm><realm-public-key>MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Q3RNbrVBcY7xbpkB2ELjbYvyx2Z5NOM/9gfkOkBLqk0mWYoOIgyBj4ixmG/eu/NL2+sja6nzC4VP4G3BzpefelGduUGxRMbPzdXfm6eSIKsUx3sSFl1P1L5mIk34vHHwWYR+OUZddtAB+5VpMZlwpr3hOlfxJgkMg5/8036uebbn4h+JPpvtn8ilVAzrCWqyaIUbaEH7cPe3ecou0ATIF02svz8o+HIVQESLr2zPwbKCebAXmY2p2t5MUv3rFE5jjFkBaY25u4LiS2/AiScpilJD+BNIr/ZIwpk6ksivBIwyfZbTtUN6UjPRXe6SS/c1LaQYyUrYDlDpdnNt6RboQIDAQAB</realm-public-key><auth-server-url>http://localhost:8180/auth</auth-server-url><ssl-required>external</ssl-required><resource>kie</resource><enable-basic-auth>true</enable-basic-auth><credential name="secret">925f9190-a7c1-4cfd-8a3c-004f9c73dae6</credential><principal-attribute>preferred_username</principal-attribute></secure-deployment>
</subsystem>

如果您在第2步中从本文中导入了示例json文件,则可以通过使用具体的部署名称来使用与上述相同的配置。 否则,请使用您的值进行以下配置:

  • 安全部署的名称 –使用具体应用程序的WAR文件名
  • 领域 –是应用程序将使用的领域,在我们的示例中,是在步骤2中创建的演示领域。
  • 领域公钥 –在此提供演示领域的公钥。 这不是强制性的,如果未指定,将从服务器中检索它。 否则,您可以在Keycloak管理控制台->领域设置(用于演示领域)->密钥中找到它
  • 身份验证服务器URL – Keycloak身份验证服务器的URL
  • 资源 –在步骤2中创建的客户端的名称。在我们的示例中,使用值kie
  • 启用基本身份验证 –在此示例中,我们还启用基本身份验证机制,因此客户端可以同时使用令牌(Baerer)和基本方法来执行请求。
  • 凭据 –使用kie客户端的密码值。 您可以在Keycloak管理控制台->客户端-> kie->凭据选项卡->复制密钥值中找到它。

对于此示例,您必须注意将您的具体值用于安全部署名称realm-public-key凭据密码。 您可以在此处找到有关KC适配器配置的详细信息。

步骤3.3 –运行环境

此时,Keycloak服务器已在主机上启动并运行,并且已为jBPM应用程序服务器安装并配置了KC适配器。 您可以使用以下命令运行该应用程序:

$JBPM_HOME/bin/standalone.sh -c standalone-full.xml

服务器启动后,您可以导航到该应用程序: http:// localhost:8080 / kie-wb-6.4.0.Final

jbpm_login_screen

jBPM和SSO –登录页面

使用Keycloak的管理员用户凭据登录: admin / password

通过Keycloak保护工作台远程服务

jBPM和Drools工作台都提供了不同的远程服务端点,第三方客户端可以使用远程API来使用这些端点。

为了通过Keycloak验证这些服务,必须禁用BasicAuthSecurityFilter ,对jBPM的WAR文件中的WEB-INF / web.xml文件(应用程序部署描述符)进行那些修改:

  1. 卸下过滤器:
    < filter >
    <filter-name>HTTP Basic Auth Filter</filter-name><filter-class>org.uberfire.ext.security.server.BasicAuthSecurityFilter</filter-class><init-param><param-name>realmName</param-name><param-value>KIE Workbench Realm</param-value></init-param>
    </filter><filter-mapping><filter-name>HTTP Basic Auth Filter</filter-name><url-pattern>/rest/*</url-pattern><url-pattern>/maven2/*</url-pattern><url-pattern>/ws/*</url-pattern>
    </filter-mapping>
  2. 将远程服务网址格式限制为:
    <security-constraint><web-resource-collection><web-resource-name>remote-services</web-resource-name><url-pattern>/rest/*</url-pattern><url-pattern>/maven2/*</url-pattern><url-pattern>/ws/*</url-pattern></web-resource-collection><auth-constraint><role-name>rest-all</role-name></auth-constraint>
    </security-constraint>

重要说明 :使用远程服务的用户必须是角色rest-all的成员。 如第2步所述,此示例中的admin用户已经是rest-all角色的成员。

执行服务器

KIE Execution Server提供的REST API比任何第三方客户端都可以使用。 本节介绍如何将KIE Execution Server与Keycloak SSO集成在一起,以便将第三方客户端身份管理委派给SSO服务器。

考虑到以上环境正在运行,因此请考虑具有以下条件:

  • 在http:// localhost:8180 / auth上运行并侦听的Keycloak服务器
  • 一个名为demo的领域,其jBPM Workbench的客户端名为kie
  • 在http:// localhost:8080 / kie-wb-6.4.0-Final运行的jBPM工作台

请按照以下步骤将执行服务器添加到此环境中:

  • 在Keycloak上为执行服务器创建客户端
  • 安装安装程序和执行服务器(带有KC客户端适配器)

步骤1 –在Keycloak上为执行服务器创建客户端

根据要部署的每个执行服务器,您必须在Keycloak的演示领域中创建一个新客户端。

  1. 转到KC管理控制台 ->客户端->新客户端
  2. 名称: kie-execution-server
  3. 根URL:http:// localhost:8280 /
  4. 客户端协议:openid-connect
  5. 访问类型:机密(如果需要,则为公开,但不建议公开)
  6. 有效的重定向URI:/kie-server-6.4.0.Final/*
  7. 基本网址:/kie-server-6.4.0.Final

在此示例中,先前步骤中已经创建的admin用户是用于客户端请求的管理员用户。 因此,请确保管理员用户是角色kie-server的成员,以便使用执行服务器的远程服务。 如果角色不存在,请创建它。

注意:此示例认为执行服务器将配置为使用200端口偏移量运行,因此HTTP端口将在localhost:8280可用

步骤2 –安装和设置KC客户端适配器和执行服务器

此时,一个名为kie-execution-server的客户端已准备就绪,可以在KC服务器上从执行服务器上使用。 让我们安装,设置和部署执行服务器:

  1. 安装另一个Wildfly服务器以用于执行服务器和KC客户端适配器。 您可以按照上面有关工作台的说明进行操作,也可以遵循官方的适配器文档 。
  2. 从Wildfly服务器的配置路径中编辑standalone-full.xml文件,并将KC子系统适配器配置为:
    <secure-deployment name="kie-server-6.4.0.Final.war"><realm>demo</realm><realm-public-key>MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB</realm-public-key><auth-server-url>http://localhost:8180/auth</auth-server-url><ssl-required>external</ssl-required><resource>kie-execution-server</resource><enable-basic-auth>true</enable-basic-auth><credential name="secret">e92ec68d-6177-4239-be05-28ef2f3460ff</credential><principal-attribute>preferred_username</principal-attribute>
    </secure-deployment>

如果与本示例不同,请考虑您的具体环境设置:

  • 安全部署名称->使用正在部署的执行服务器war文件的名称
  • 公钥->使用演示领域公钥或将其保留为空白,如果是这样,服务器将提供一个
  • 资源->这次,而不是WB配置中使用的kie客户端,请使用kie-execution-server客户端
  • 启用基本身份验证->由您决定。 您可以为第三方服务使用者启用基本身份验证
  • 凭据->将密钥用于kie-execution-server客户端。 您可以在KC管理控制台的“ 凭据”标签中找到它。

步骤3 –部署和运行执行服务器

只需使用任何可用机制在Wildfly中部署执行服务器即可。

使用以下命令运行执行服务器:

$EXEC_SERVER_HOME/bin/standalone.sh -c standalone-full.xml -Djboss.socket.binding.port-offset=200 -Dorg.kie.server.id=<ID> -Dorg.kie.server.user=<USER> -Dorg.kie.server.pwd=<PWD> -Dorg.kie.server.location=<LOCATION_URL>  -Dorg.kie.server.controller=<CONTROLLER_URL> -Dorg.kie.server.controller.user=<CONTROLLER_USER> -Dorg.kie.server.controller.pwd=<CONTOLLER_PASSWORD>

例:

$EXEC_SERVER_HOME/bin/standalone.sh -c standalone-full.xml -Djboss.socket.binding.port-offset=200 -Dorg.kie.server.id=kieserver1 -Dorg.kie.server.user=admin -Dorg.kie.server.pwd=password -Dorg.kie.server.location=http://localhost:8280/kie-server-6.4.0.Final/services/rest/server -Dorg.kie.server.controller=http://localhost:8080/kie-wb-6.4.0.Final/rest/controller -Dorg.kie.server.controller.user=admin -Dorg.kie.server.controller.pwd=password

重要说明 :将使用执行服务器远程服务端点的用户必须具有分配的角色kie-server。 因此,在KC管理控制台中为将使用执行服务器远程服务的用户创建并分配此角色。

一旦启动,您可以将服务器状态检查为(针对该请求考虑使用基本身份验证,请参阅下一个使用远程服务以获取更多信息):

curl http://admin:password@localhost:8280/kie-server-6.4.0.Final/services/rest/server/

消费远程服务

为了使用工作台或执行服务器提供的不同远程服务,您的客户端必须在KC服务器上进行身份验证,并且必须具有有效的令牌才能执行请求。

注意 :请记住,为了使用远程服务,经过身份验证的用户必须已分配:

  • 使用WB远程服务的所有角色
  • 使用Execution Server远程服务的角色kie-server

请确保已创建必要的角色并将其分配给将在Keycloak管理控制台上使用远程服务的用户。

您有两个选择可以使用不同的删除服务端点:

  • 如果应用程序的客户端支持基本身份验证,则使用它
  • 使用基于承载(令牌)的身份验证

使用基本身份验证

如果KC客户端适配器配置启用了基本身份验证(如本指南中针对WB( 步骤3.2 )和Execution Server所建议的那样),则可以避免令牌授予/刷新调用,而只需调用服务即可,如以下示例所示。

WB远程存储库端点的示例:

curl http://admin:password@localhost:8080/kie-wb-6.4.0.Final/rest/repositories

检查执行服务器状态的示例:

curl http://admin:password@localhost:8280/kie-server-6.4.0.Final/services/rest/server/

使用基于令牌的身份验证

第一步是在Keycloak上创建一个新客户端,该客户端允许第三方远程服务客户端获取令牌。 可以通过以下方式完成:

  • 转到KC管理控制台,然后使用以下配置创建新客户端
    • 客户编号: kie-remote
  • 当我们将要手动获取令牌并调用服务时,让我们稍微延长令牌的寿命。 在生产访问令牌中,令牌应具有相对较低的超时,最好少于5分钟:
    • 转到KC管理控制台

创建用于远程客户端的公共客户端后,您现在可以通过对KC服务器的令牌端点执行HTTP请求来获取令牌。 这是命令行示例:

RESULT=`curl --data "grant_type=password&client_id=kie-remote&username=admin&passwordpassword=<the_client_secret>" http://localhost:8180/auth/realms/demo/protocol/openid-connect/token`TOKEN=`echo $RESULT | sed 's/.*access_token":"//g' | sed 's/".*//g'`

此时,如果您回显$ TOKEN ,它将输出从KC服务器获得的令牌字符串,该令牌字符串现在可用于授权对远程端点的进一步调用。 例如,如果要检查内部jBPM存储库:

curl -H "Authorization: bearer $TOKEN" http://localhost:8080/kie-wb-6.4.0.Final/rest/repositories

翻译自: https://www.javacodegeeks.com/2016/03/keycloak-sso-integration-jbpm-drools-workbench.html

sso集成shiro

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 01. 两数之和

原题 分析&#xff1a; 1.根据题意&#xff0c;首先需要将要数据选择一个合适的 数据结构模型。 因为是对应相关联&#xff0c;所以我们选择unordered_map 2.因为是一组数&#xff0c;所以用数组 &#xff0c;将数值与数组下标对应起来 3.已知两数之和&#xff0c;从数组第…

python中自带的模块_python中的模块详解

概念python中的模块是什么&#xff1f;简而言之&#xff0c;在python中&#xff0c;一个文件(以“.py”为后缀名的文件)就叫做一个模块&#xff0c;每一个模块在python里都被看做是一个独立的文件。模块可以被项目中的其他模块、一些脚本甚至是交互式的解析器所使用&#xff0c…

剑指 Offer 51-----59

剑指 Offer 55 - I. 二叉树的深度 解题思路&#xff1a; class Solution { public:int maxDepth(TreeNode* root) {if(rootNULL)return 0;int lmaxDepth(root->left);int rmaxDepth(root->right);return (l>r?l:r)1;} };

jbpm 和 drools_jBPM和Drools工作台中的用户和组管理

jbpm 和 drools介绍 本文讨论了一项新功能&#xff0c;该功能允许使用集成在jBPM和Drools Workbenches中的直观友好的用户界面来管理应用程序的用户和组。 用户和组管理 在安装&#xff0c;设置和使用此功能之前&#xff0c;本文讨论了一些以前的概念&#xff0c;需要进一步理…

剑指 Offer 01-----20

剑指 Offer 03. 数组中重复的数字 解题思路&#xff0c;使用STL中的set&#xff0c;逐个读入vector中的每一个元素&#xff0c;使用set进行对比&#xff0c;如果set中存在会返回1&#xff0c;这时直接返回该元素即可&#xff1b;如果set中没有可以insert这个元素到set&#xf…

python filter函数中写none_Python3基础 filter 第一个参数为NONE时 结果只返回为True的对象...

Python : 3.7.0OS : Ubuntu 18.04.1 LTSIDE : PyCharm 2018.2.4Conda : 4.5.11typesetting : Markdowncode"""Author : 行初心Date : 18-9-23Blog : www.cnblogs.com/xingchuxinGitee : gitee.com/zhichengjiu"""def main():# 过滤器# 通过 过滤…

从事java编程技能要求_5道Java视频课程,提高您的编程技能

从事java编程技能要求作为Web开发人员&#xff0c;跟上技术知识可能会很棘手。 新技术似乎每天都在弹出&#xff0c;而基本技术也看到了重复迭代的浪潮&#xff0c;增加了新的功能。 Java开发人员应该做什么&#xff1f; 这是在线教育平台发挥作用的地方。 它们可以帮助您快速…

常见算法核心思想

双指针算法 1.双指针算法主要是为了提高朴素算法的复杂度&#xff0c;即O(n^2)的算法&#xff0c;优化为O(n)的算法。 2.常见模板 for (int i 0, j 0; i < n; i ) {while (j < i && check(i, j)) j ;// 具体问题的逻辑 } 常见问题分类&#xff1a;(1) 对于…

sqlserver存储过程加锁后怎么解锁_【缺陷周话】第59期:重复加锁

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01;*声明&#xff1a;《缺陷周话》栏目系列文章由奇安信代码卫士团队原创出品。未经许可&#xff0c;禁止转载。转载请注明“转自奇安信代码卫士 www.codesafe.cn”。代码审计是使用静态分析发现源代码中安全缺陷的方法&…

idea添加jboss_如何将云持久存储添加到JBoss Cool Store

idea添加jboss我们一直在讨论为什么应用程序开发人员在App Dev Cloud Stack系列中不能再忽略其堆栈了。 带有JBoss Cool Store的App Dev Cloud 上个月&#xff0c;我们带来了一个完整的零售示例&#xff0c;其中的JBoss Cool Store运行在您的堆栈的OpenShift Enterprise层上&…

【技术解决方案】优化FFmpeg探测网络流时间过长的问题

场景要求 项目要求点播速度是300到500毫秒之间&#xff0c;现在最长的点播延时是1300毫秒&#xff08;有的时候甚至无法播放视频&#xff09;&#xff0c;生产环境是RTSP传输H264裸流数据&#xff0c;研究在接收到I帧的时候&#xff0c;开始出来图像&#xff0c;简化FFmpeg的调…

python画各种统计图的特点_Python 分词并画出词频统计图 | 睿鑫网络

import turtle##全局变量###词频排列显示个数count 10#单词频率数组-作为y轴数据data []#单词数组-作为x轴数据words []#y轴显示放大倍数-可以根据词频数量进行调节yScale 2#x轴显示放大倍数-可以根据count数量进行调节xScale 30################# Turtle Start #########…

ssm影城项目_影场与属性访问器界面

ssm影城项目卡尔迪亚&#xff08;Carl Dea&#xff09;最近跟踪了我的一篇名为“ 保存内存”的博客文章&#xff01; 为属性使用阴影字段 。 在他的博客中&#xff0c;他建议使用称为“属性访问器”的接口来消除大量使用样板代码所需的样板代码。 卡尔还提到他尚未用大量数据测…

【技术解决方案】优化FFmpeg编码器参数设置

FFmpeg x264编码参数对照表 x264 ffmpeg 说明 命令行 字段 命令行 字段 qp qp_constant cqp cqp 固定量化因子。取值范围0到51。 经常取值在20-40之间&#xff0c;越小质量 越好,要求的码率越高。0表示无损压缩 max-keyint i_keyint_max g gop_size …

python version翻译_python实现在线翻译功能

对于需要大量翻译的数据&#xff0c;人工翻译太慢&#xff0c;此时需要使用软件进行批量翻译。1.使用360的翻译def fanyi_word_cn(string):url"https://fanyi.so.com/index/search"#db_path ./db/tasks.dbForm_Data {}#这里输入要翻译的英文Form_Data[query] string…

java流写入数据库_Java 8:在2分钟内将智能流与数据库一起使用

java流写入数据库快速流媒体 当Java 8最终问世时&#xff0c;我和一些大学开始了一个开源项目&#xff0c;以利用Java 8的流库使整个Java / DB问题更进一步&#xff0c;以便将数据库表视为纯Java 8流。 速度诞生了&#xff01; 哇&#xff0c;现在我们可以做类型安全的数据库应…

【技术解决方案】RTP_UDP传输过程中数据丢失的解决方案

1. 从发送端解决(推荐) 适用条件: ①发送端是可以控制的.②微秒数量级的延迟可以接受 解决方法:发送时使用usleep(1)延迟1微秒发送,即发送频率不要过快,延迟1微妙发送,可以很好的解决这个问题.。 2.从接收端解决方法一 适用条件:①无法控制发送端发送数据的频率 解决方法:…

方法参数泛型_无参数泛型方法反模式

方法参数泛型最近&#xff0c;有关Java泛型的一个非常有趣的问题发布到Stack Overflow和reddit上。 请考虑以下方法&#xff1a; <X extends CharSequence> X getCharSequence() {return (X) "hello"; }尽管这种不安全的转换看起来有些古怪&#xff0c;并且您…

python文件读取写入实践_python文件写入实例分析

本文实例讲述了python文件写入的用法。分享给大家供大家参考。具体分析如下&#xff1a;Python中wirte()方法把字符串写入文件&#xff0c;writelines()方法可以把列表中存储的内容写入文件。ffile("hello.txt","w")li["hello world\n","he…

【H.264/AVC视频编解码技术】序章【编码的前世今生】

视频格式 关于视频格式的内容,在这里不进行赘述,详细学习可以参考视频格式 视频数据冗余 数据冗余的类型分为哪几种? 图像与视频在数字化过程,即模电转数电过程中会产生数据冗余。从数字信号的统计特征方面,一般将这些数据冗余分为空间冗余,时间冗余,信息熵冗余三大…