激光雷达 eai g6

本文介绍了如何使用TAMeb 6.0版来满足复杂的身份验证要求。 TAMeb 6.0的一项新功能称为EAI,旨在提供身份验证的灵活性。

在本文中,使用TAMeb构建并配置了一个示例EAI应用程序,以满足澳大利亚政府电子身份验证框架( AGAF )的要求。 AGAF描述了用于确定正在访问联邦政府部门网站的公民的身份验证保证级别的策略。

除了实施AGAF之外,基于TAMeb的解决方案还具有以下优点:

  1. TAMeb提供了一个基于安全代理的环境,在该环境中,所有请求都必须先由TAMeb代理(WebSEAL)授权,然后才能到达应用程序。
  2. 该环境可以轻松扩展以支持联合身份管理功能(SAML,Liberty,WS-Federation和WS-Trust)。 Tivoli联合身份管理(TFIM)产品基于TAMeb构建。
  3. TAMeb J2EE™(WebSphere®和WebLogic)和.NET授权插件可用于为这些环境提供基于角色的安全性。
  4. 可以采用灵活的TAMeb授权策略功能。
  5. TAMeb单点登录功能可用于多种应用程序。

本文描述的用于构建满足AGAF要求的解决方案的方法是通过使用TAMeb 6.0版中引入的EAI功能。 这项新功能与TAMeb身份验证级别,受保护的对象策略,登录重定向和身份验证提升功能结合使用。 本文对TAMeb配置进行了详细描述。

什么是AGAF?

可以在澳大利亚政府信息管理办公室( AGIMO )的网站上找到AGAF的说明。 AGAF的关键之一是在确定是否应授予对资源的访问权限时使用身份验证保证级别(AAL)。 根据用户最初的注册方式以及他们在线身份验证的方式来计算AAL。 如图1所示。 在此示例中,资源的AAL为1(低)到4(高)。

图1. AGAF AAL表

注册

当某人(可能代表某企业行事)想要访问部门资源(例如基于Internet Web的应用程序)时,他们必须首先在部门中注册(或在参与部门之一注册)。 注册的结果是,一个人具有注册级别的实力,并且具有以后进行在线身份验证的能力。 如图2所示,其中具有支持LDAP的目录存储这些值。

图2.注册过程

访问基于Web的应用程序

当注册用户随后访问该部门的基于Web的应用程序时,安全系统将确定是否应授予访问权限。 如图3所示,步骤如下:

  1. 用户尝试访问基于Web的应用程序。 用户将被要求表明身份,并可以任选被要求进行身份验证。 例如,可能为所有用户提供用户名和密码,并且此步骤可能要求用户使用这些凭据进行身份验证。
  2. 安全系统咨询授权策略以确定应用程序所需的AAL。
  3. 安全系统根据LDAP确定用户的注册和身份验证功能强度。 例如,用户可能已使用其护照注册以进行身份​​验证,并且具有其他身份验证凭据,例如令牌或生物特征认证功能。
  4. 安全系统将查阅AAL矩阵以确定用户是否可以访问该应用程序。 这意味着要查看注册强度和身份验证功能。
  5. 如果用户具有必要的身份验证功能,则将向他们询问身份验证凭据。 例如,可能会要求他们使用质询-响应令牌进行身份验证。
图3.实施AGAF的安全流程

TAMeb的身份验证替代方案

本节讨论使用TAMeb进行身份验证的替代方法。

开箱即用地使用WebSEAL

TAMeb Web反向代理WebSEAL认证和授权用户对基于Web的应用程序的访问。 如图4所示。 在该示例中,正在使用WebSEAL“开箱即用”认证功能。 这可能是用户名和密码,证书或令牌认证。 在这种情况下,“开箱即用”意味着尚未实现WebSEAL的定制。

  1. 用户尝试访问应用程序2。
  2. WebSEAL查阅其安全性策略以确定用户是否应该进行认证。 它首先检查访问控制列表(ACL)以查看用户是否需要进行身份验证,然后检查(可选)(受保护对象策略(POP))。 如果需要认证,则WebSEAL会提示用户进行认证。
  3. 用户提供认证信息。
  4. WebSEAL检查认证信息。 在这种情况下,WebSEAL将检查LDAP(用户名和密码)。
  5. 如果用户已成功认证,并且还被授权访问该资源,那么WebSEAL会将原始请求转发给Application 2。
图4:使用TAMeb WebSEAL认证

WebSEAL外部认证C API

WebSEAL提供了定制认证的功能。 当需要WebSEAL不提供的认证机制时,将使用WebSEAL外部认证C API(XAUTHN)功能。

XAUTHN是一个用C语言编写的自定义库,用于与用户交互并实现某种类型的身份验证。 XAUTHN库驻留在WebSEAL服务器上,WebSEAL将身份验证移交给XAUTHN库。 对用户的认证完成后,XAUTHN库将已认证的用户标识为WebSEAL或返回失败的结果。 它可以选择将扩展属性返回给用户。

然后,WebSEAL以通常的方式提供授权, 如图5所示。

图5:WebSEAL XAUTHN认证

WebSEAL定制EAI

在TAMeb v6.0中,引入了EAI。 EAI提供了一种用于编写自定义身份验证应用程序的方法。 如图6所示,EAI应用程序不是驻留在WebSEAL服务器上,而是连接在WebSEAL之后。 在认证结束时,类似于XAUTHN,EAI应用程序将已认证用户的身份(以及其他属性(如果需要))通知WebSEAL。

图6:具有EAI认证的WebSEAL

AGAF的TAMeb EAI认证

TAMeb针对此解决方案的关键功能:

  • EAI :这是针对AGAF要求选择的解决方案。 EAI应用程序将需要考虑所访问资源的所需AAL,用户的注册级别,用户可用的身份验证功能,AAL表以及可能的其他因素。 EAI直接与用户交互(通过WebSEAL联结)以收集认证数据。
  • 身份验证级别 :TAMeb允许将身份验证级别配置为从0(未经身份验证)到任何整数值。 这些将通过EAI应用程序映射到AGAF AAL。
  • POP :用于指示访问资源所需的身份验证级别(因此是AGAF AAL)。 这可以是在应用程序级别,也可以是单个URL。
  • WebSEAL加强认证 :随着用户移动到新的应用程序(或不同的URL),如果资源的AAL高于用户的当前值,WebSEAL将检查POP并触发新的认证。
  • 本地响应重定向 :可以将WebSEAL配置为将新的登录请求重定向到URL(在这种情况下为EAI服务器)。 WebSEAL将向EAI应用程序指示此资源需要什么AAL。
图7:AGAF的TAMeb EAI认证

图7显示了示例流程:

  1. 用户向WebSEAL发送请求以访问应用程序2(在WebSEAL之后)。
  2. WebSEAL会参考其授权策略,并确定用户需要AAL4。由于用户直到那时才一直访问公共资源,并且未经身份验证(AAL 0),因此开始进行身份验证。 将用户的请求重定向到EAI应用程序,并向EAI应用程序发出要求AAL 4的指示。 WebSEAL高速缓存原始URL请求。
  3. EAI应用程序将查阅AAL矩阵和用户的LDAP条目,以确定用户如何进行身份验证以满足AAL 4要求。 (在应用程序中,在查询其LDAP信息之前,始终强制用户使用用户名和密码进行身份验证,以确认用户的身份)。
  4. EAI应用程序向用户发送响应,指示用户如何进行身份验证以访问该应用程序。 可能只有一种选择,或者没有(用户无法根据其注册级别和身份验证能力来访问AAL),或者可能有多种选择。
  5. 用户输入他们的认证数据。 这将返回到EAI应用程序,该应用程序使用数据对用户进行身份验证。 EAI向WebSEAL发出认证已通过或失败的信号。 如果通过,则EAI应用程序会将用户的AAL返回到WebSEAL。 用户的AAL将与资源所需的AAL相同或更高。
  6. WebSEAL会将用户的浏览器重定向到原始资源。

用户稍后可以尝试访问更高的AAL资源,并将重复该过程。

AGAF示例应用程序

我们创建了一个实现AGAF要求的AGAF应用程序。 Enterprise Archive Repository文件(耳)包含源代码,并且可以立即部署到Java™应用程序服务器。 (该代码是在Rational®Application Developer中创建的,可以在WebSphere®Application Server 6.0.0.2上运行)。

AGAF应用程序由两个组件组成:

  1. EAI身份验证应用程序(http://hostname/eai/AGAFDemoWeb/AGAFAppMainPage.html)。 该网页具有指向不同AAL处的应用程序的链接
  2. 管理应用程序(http://hostname/eai/AGAFDemoWeb/AGAFIndex.jsp)。 部门管理员可以访问此URL。

EAI认证申请

与来自用户的请求交互是EAI认证应用的servlet 所示 。 这是最高级别的Servlet代码,不包含从中调用的所有Java类。 完整的源代码可在ear文件中找到。

每当访问受保护的资源时,EAI身份验证应用程序将首先提示用户使用用户名和密码进行身份验证。 这样一来,在访问其注册级别和身份验证功能之前,可以肯定地识别用户。

当用户以更高的AAL访问资源时,EAI应用程序将计算用户具有的身份验证功能可用(可能不止一个),并为用户提供身份验证的选择。 如图8所示。

图8:身份验证选择

EAI身份验证应用程序本身不执行身份验证。 将为每种身份验证功能插入此代码。

行政申请

主管理屏幕具有以下选择:

  1. LDAP配置:用于配置EAI应用程序以与TAMeb用户注册表一起使用。
  2. TAM配置:用于将EAI应用程序配置为TAMeb应用程序(以便它可以创建Tivoli Access Manager用户)。
  3. 用户注册:用于注册具有注册级别和身份验证功能的新用户。
  4. 更改身份验证功能:用于定义部门的不同身份验证功能并将其分配给身份验证级别。
  5. 更改注册要求级别:用于定义不同的注册选项。
  6. 更改身份验证保证级别:用于定义每个注册级别和身份验证级别的AAL矩阵。

如图9所示的注册屏幕用于创建用户,定义其注册级别并为用户提供不同的身份验证功能:

图9:用户注册屏幕

也可以定义EAI应用程序提供的不同身份验证功能, 如图10所示:

图10:定义身份验证功能

可以定义不同的注册级别, 如图11所示:

图11:定义注册级别

AAL表是可配置的, 如图12所示,因此,基于注册和身份验证功能,还可以定义AAL。 例如,从该表的注册级别2,身份验证级别4,AAL已定义为5。

图12:设置AAL表

AGAF应用程序的配置

本节描述了AGAF应用程序的配置。

AGAF演示配置

要配置AGAF演示应用程序,您需要以下环境:

  1. Websphere应用程序服务器6.0.0.2
  2. Tivoli Directory Server 6.0
  3. Tivoli Access Manager 6.0运行时
  4. Tivoli Access Manager 6.0策略服务器
  5. Tivoli Access Manager 6.0授权服务器
  6. 适用于Java的Tivoli Access Manager 6.0运行时
  7. Tivoli Access Manager 6.0 WebSEAL

创建受保护的应用程序

六个后端应用程序受WebSEAL保护。 在Webseal /opt/pdweb/www-default/docs目录中创建六个应用程序。 将它们称为app1.html至app6.html。 html文件的内容可能很小,但应标识受保护的应用程序。

在用于访问该应用程序的计算机上,更改/ etc / hosts文件以添加www.demo.com的条目以指向Webseal Server网络接口。 该URL硬编码在应用程序主页中。

WebSEAL配置

本节详细介绍如何使用WebSEAL配置EAI应用程序。

创建从WebSEAL服务器到EAI应用程序的联结:

# pdadmin -a sec_master -p passwordpdadmin> server task default-webseald-hostname create -t tcp-h eai-hostname -c iv_user /eai

允许未经授权的访问联结。 首先创建未经身份验证的ACL:

pdadmin>  acl create unauth
pdadmin> acl modify unauth set group iv-admin TcmdbsvaBRrxl
pdadmin> acl modify unauth set group webseal-servers Tgmdbsrxl
pdadmin> acl modify unauth set user sec_master TcmdbsvaBRrxl
pdadmin> acl modify unauth set any-other Trx
pdadmin> acl modify unauth set unauthenticated Trx

现在将ACL附加到EAI联结:

pdadmin> acl attach /WebSEAL/hostname-default/eai unauth

在WebSEAL中配置EAI认证库。 在此步骤及后续步骤中,将编辑配置文件webseald-default.conf :

[authentication-mechanisms]# EXTERNAL AUTHENTICATION INTERFACE# ext-auth-interface = <ext-auth-interface-library>
ext-auth-interface = /opt/pdwebrte/lib/libeaiauthn.so

为HTTP和HTTPS会话启用EAI:

[eai]
#-----------------------
# EXTERNAL AUTHENTICATION INTERFACE
#------------------------# Enable EAI authentication.  No other EAI parameters will take effect
# if this is set to 'none'.# One of <http, https, both, none>
eai-auth = both

设置触发URL。 触发URL是生成EAI消息的后端资源的URL。 WebSEAL仅接受来自配置为触发器URL的资源的EAI消息。 在webseal-default.conf文件中:

[eai-trigger-urls]
trigger = /eai/AGAFDemoWeb/AGAFDemoEAI

在WebSEAL中配置本地响应重定向。 此功能更改了WebSEAL,以便将所有本地生成的页面(包括登录页面)替换为对指定URL的重定向。 如果此URL是EAI应用程序的一部分,则它可以检查请求是否针对登录页面,如果是,则启动EAI身份验证。

首先启用本地响应重定向:

[acnt-mgt]enable-local-response-redirect = yes

接下来,提供将处理本地响应请求的应用程序的URL。

[local-response-redirect]local-response-redirect-uri = /eai/AGAFDemoWeb/AGAFDemoEAI

最后,配置将传递给本地响应处理程序的信息。 此信息在重定向的查询字符串中传递,因此后端应用程序可以轻松读取它。

[local-response-macros]macro = AUTHNLEVEL
macro = ERROR_CODE

配置用于逐步认证的认证级别。 所有级别的身份验证都将映射到EAI应用程序:

[authentication-levels]level = unauthenticated
level = ext-auth-interface
level = ext-auth-interface
level = ext-auth-interface
level = ext-auth-interface
level = ext-auth-interface
level = ext-auth-interface
level = ext-auth-interface

重新启动网络密封:

# pdweb restart

为每个应用程序配置POP。 在此示例中,可以将POP附加到六个应用程序。 对于每个应用程序级别x,请执行以下操作:

# pdadmin -a sec_master -p password
pdadmin>  pop create authlevelx
pdadmin>  pop modify authlevelx set ipauth anyothernw x
pdadmin>  pop attach /WebSEAL/hostname-default/appx.html authlevelx

Tivoli Access Manager Java运行时配置

AGAF演示应用程序通过TAM Java管理API创建Tivoli Access Manager(TAM)用户。 为此,必须配置TAM Java运行时。 针对Websphere Java运行时环境配置TAM Java运行时。

将AGAF应用程序配置到安全域中

使用java SvrSslCfg命令将AGAF应用程序配置到TAM安全域中:

java com.tivoli.pd.jcfg.SvrSslCfg -action config \-admin_id sec_master  -admin_pwd <sec_master password>   \-appsvr_id <application Server Name>  -appsvr_pwd \<application server password>  -host \<host> -mode remote  -port <port>  -policysvr \<policy server name>:7135:1 -authzsvr \ <authorization server name>:7136:1 \-cfg_file <configuration file> -key_file \<key file> -domain mydomain \-cfg_action create

部署应用程序

要将AGAF EAI应用程序部署到WebSphere Application Server 6.0.0.2,请使用Websphere管理控制台并执行以下操作:

  1. 展开应用程序选项卡。
  2. 单击“安装新应用程序”。
  3. 在本地文件系统上指定AGAF演示EAI应用程序的路径。
  4. 接受其余部署的默认选项。
  5. 保存配置。

部署后,该应用程序不会自动启动。 通过企业应用程序链接启动应用程序。

使用AGAF管理应用程序

安装AGAF应用程序后,需要对其进行配置。 配置索引页面位于:

http://hostname/eai/AGAFDemoWeb/AGAFIndex.jsp

在此页面上,配置以下内容:

  1. LDAP配置。 输入以下LDAP信息:

    1. 格式为ldap:// <ldap主机名>:<port>的LDAP提供程序名称
    2. LDAP后缀:例如c = us
    3. 绑定DN
    4. 绑定密码
  2. TAM配置
    1. 在SvrSslCfg期间配置的TAM配置文件。 格式为file:// <file>
    2. TAM管理用户(sec_master)
    3. TAM管理员密码
    4. d。 注册表后缀。
  3. 用户注册:注册将向EAI进行身份验证的用户。 为配置的每个用户提供以下信息:
    1. 用户名
    2. 名字
    3. 登记类型
    4. 为每个所需的认证级别指定认证机制
  4. 更改身份验证功能:根据需要更改每个级别的身份验证功能
  5. 更改注册要求级别:对于每个注册级别,选择一个注册类型
  6. 更改认证保证级别:为认证保证级别矩阵定义认证保证级别。

访问AGAF应用程序

AGAF演示应用程序的配置现已完成。 您现在可以访问受保护的资源。 为此,请访问以下链接:

http://hostname/eai/AGAFDemoWeb/AGAFAppMainPage.html

这是一个索引页面,具有指向六个受保护资源(app1.html至app6.html)的链接。 您将能够访问每一个,具体取决于您为用户提供的注册强度,您为用户提供的身份验证功能以及身份验证保证级别(AAL)矩阵的配置。 如果您的AAL不够高,并且您可以通过使用其他身份验证机制提升到更高的AAL,则会提示您选择一种更强的身份验证机制。 使用所需的身份验证机制成功进行身份验证后,将允许您访问受保护的资源。

结论

将EAI添加到TAMeb提供了另一种方法,用于实现任意复杂的身份验证要求。 通过遵循本文概述的步骤,并使用示例EAI应用程序,可以快速设置一个简单的EAI应用程序以用于TAMeb。

示例代码清单

清单1.用于AGAF的EAI应用程序Servlet
AGAFDemo.javapackage com.tivoli.am.eb.AGAFDemo;import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.util.Enumeration;
import java.io.IOException;
/** AGAF Demonstration EAI Servlet*/
public class AGAFDemoEAI extends HttpServlet implements Servlet {/** Configuration object to store EAI state*/private AGAFServerConfig config = null;/** Form fields*/public static final String AUTH_OP = "authType";public static final String AUTHN_LEVEL_FIELD = "AUTHNLEVEL";private String authOperation = null;public AGAFDemoEAI() {super();}/** The first time the EAI is accessed via the Webseal Local Response * Redirect capability, the EAI redirects the user to the * username/password login page. By default, all users are allowed* to use username/password authentication. The EAI needs to establish* the user's identity via username/password authentication in * order to retrieve the authentication methods and their registration * type.  */protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException,
IOException {// TODO Auto-generated method stubString url = "./AGAFUserPassLogin.jsp";Enumeration parameters = arg0.getParameterNames();String name = null;String value = null;url = url.trim() + "?";while (parameters.hasMoreElements()) {name = (String)parameters.nextElement();value = arg0.getParameter(name);url = url + name + "=" + URLEncoder.encode(value) + "&";}arg1.sendRedirect(arg1.encodeRedirectURL(url.substring(0,
url.length())));}/** Handle the authentication request depending on the contents of the * posted login form. Each authentication object completes the * authentication and determines if the user has the AAL required. If * the AAL is not high enough, the authentication object redirects to* the authentication selection page to determine what authentication* methods will allow the user to achieve the required AAL. */protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException,
IOException {// TODO Auto-generated method stub             authOperation = arg0.getParameter(AUTH_OP);AGAFAuth auth = null;try {if (authOperation.equals(config.getUserPassString())) {auth = new AGAFUserPassAuth(config, arg0,arg1);          }if (authOperation.equals(config.getTokenString())) {auth = new AGAFToken(config, arg0,arg1);}if (authOperation.equals(config.getSmartCardString())) {auth = new AGAFSmartCardAuth(config, arg0, arg1);}if(authOperation.equals(config.getBiometricString())) {auth = new AGAFBiometricAuth(config, arg0, arg1);}        if (authOperation.equals(config.getAuthSelectionString())) {auth = new AGAFAuthSelection(config, arg0, arg1);}if (auth == null) {            auth = new AGAFUnauth(config,arg0,arg1);}} catch (IllegalStateException e) {super.log("A fatal exception has occured: ", e);throw new ServletException(e);           }if (auth != null) {try {auth.authenticate();} catch (IOException e) {super.log("A fatal exception has occured: ", e);throw new ServletException(e);}}       }/** Initialize the Servlet*/public void init() throws ServletException {// TODO Auto-generated method stubsuper.init();config = AGAFServerConfig.getInstance(this.getServletContext());       }
}

翻译自: https://www.ibm.com/developerworks/tivoli/library/t-tamebeaicar/index.html

激光雷达 eai g6

激光雷达 eai g6_如何配置TAMeb 6.0 EAI以实现复杂的身份验证要求相关推荐

  1. TIMO 后台管理系统 v2.0.1 发布,加入 jwt 身份验证组件,基于 Spring Boot

    TIMO后台管理系统v2.0.1版本已发布(基于SpringBoot),更新日志: 新增:加入JWT TOKEN鉴权机制,实现多端的权限验证! 更新:模块化全局统一异常处理机制及项目配置,降低模块间的 ...

  2. ASP.Net 2.0窗体身份验证机制详解(FormsAuthentication) (转载)

    ASP.Net 2.0窗体身份验证机制详解(FormsAuthentication) 收藏 转自:http://www.aspxclub.com/l12/c_3689.html 本篇文章介绍了在ASP ...

  3. .NET Core 3.0中的Cookie身份验证

    目录 介绍 先决条件 创建Web应用程序的步骤 集成Cookie身份验证 Startup.cs文件的代码更改 将User.cs文件添加到Model文件夹 使用新的操作方法更新HomeControlle ...

  4. Android Studio 配置OpenCV4.4.0 不用安装OpenCV Manager (泪崩居然用了礼拜天2天的时间居然还没配置成功,今天又看了下配置成功了)

    Android Studio 配置OpenCV4.4.0 ,说来惭愧居然用户礼拜天2天的时间呢,期间遇到的问题大致有4个问题 这里我也总结出了最后在列举出来,(可能是新版和之前旧版本不一样的问题按照网 ...

  5. CDR配置助手 1.0 绿色免费版

    2019独角兽企业重金招聘Python工程师标准>>> CDR配置助手是一款Coreldraw设置备份.还原工具,特别是对于那些进行过coreldraw优化设置.快捷键设置的朋友更是 ...

  6. opencv-python:win7下,搭建python2.7.5环境,配置opencv3.1.0准备开工-OpenCV步步精深

    我的个人博客:点这里 搭建python2.7.5环境 下载python2.7.5 64位:https://www.python.org/ftp/python/2.7.5/python-2.7.5.am ...

  7. vue 不识别svg_vue中引用svg,vue引入svg不显示,vue引用svg配置,vue3.0+ts如何配置svg...

    注意: 如果按照下面配置正确发现svg依然无法显示可能s'v'g-sprite-loader的版本过高,重新指定版本下载npm i svg-sprite-loader@3.8.0 --save-dev ...

  8. Windows 10 下 Anaconda3 (Python 3.8) 配置 OpenCV-4.4.0

    Anaconda3 配置 OpenCV-4.4.0 我的小站.Github Anaconda指的是一个开源的Python发行版本,其包含了conda.Python等180多个科学包及其依赖项. Ope ...

  9. Windows 10 下 VS2017(+Clion) C/C++ 配置 OpenCV-4.4.0

    VS2017(+Clion) 配置 OpenCV-4.4.0 我的小站.Github OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视 ...

最新文章

  1. python的requests模块功能_《Python数据可视化编程实战》—— 1.7 安装requests模块-阿里云开发者社区...
  2. xlwt什么版本支持xlsx的版本_Spring Framework Versions版本支持说明
  3. hive mysql hdfs关系_Hive中的数据库、表、数据与HDFS的对应关系
  4. zend server 配置问题 ZendEnablerConf.xml
  5. 想做出让老板眼前一亮的可视化报告,这几个“心机”千万要有
  6. VisualGDB调试,实现VS环境下调试Android
  7. jQuery图片懒加载示例(滚动函数再加载)
  8. macOS big Sur 无限进入恢复模式,如何修复
  9. 欧姆龙PLC存储区划分小结
  10. nexus下载 通过官网下载
  11. 毕业论文格式|自制word模板 |.domt | word格式模版
  12. mysql 中caption_ACCESS数据库中Field对象的caption属性读写
  13. 一个人成熟的5大标志
  14. 会话管理:Cookie和Session
  15. android 好友功能,ListView模拟微信好友功能
  16. Raspberry Pi Pico实践系列1-Windows环境下树莓派Pico迷你开发板MicroPython快速上手实践
  17. 第九届蓝桥杯大赛软件类国赛
  18. 看待FIL能否成功不应该只关注它的币价,而是IPFS能否完全落地应用……
  19. Java集成流行的打印插件lodop
  20. 2022-2027年中国煤矿安全设备行业市场全景评估及发展战略研究报告

热门文章

  1. 【python】argv的用法
  2. python爬虫(19)爬取论坛网站——网络上常见的gif动态图
  3. element控制input输入为数字
  4. C语言高墙高,院子里有两棵树。因为有高墙庇护,一棵树长得高大挺直。而另一棵...
  5. Mxnet训练自己的数据集并测试
  6. select.select
  7. 谷歌seo外链预算方案,影响谷歌反向链接成本的因素
  8. android高仿京东秒杀,Android仿京东首页秒杀倒计时
  9. 免费的webservice接口(天气预报/IP查询/股票查询/手机归属地等)
  10. 低功耗微波雷达模组的应用你都知道多少?