8.15. 使用 CLI 脚本为可引导 JAR 启用 HTTP 身份验证
您可以使用 CLI 脚本为可引导 JAR 启用 HTTP 身份验证。此脚本会在您的服务器中添加安全域和一个安全域。
先决条件
-
您已检查了最新的 Maven 插件版本,如
MAVEN_PLUGIN_VERSION.X.GA.Final-redhat-00001
,其中 MAVEN_PLUGIN_VERSION 是主版本,X 是 microversion。请参阅 /ga/org/wildfly/plugins/wildfly-jar-maven-plugin 的索引。 -
您已检查了最新的 Galleon 功能软件包版本,如
4.0.X.GA-redhat-BUILD_NUMBER
,其中 X 是 JBoss EAP XP 的微版本,BUILD_NUMBER 是 Galleon 功能软件包的构建号。X 和 BUILD_NUMBER 可以在 JBoss EAP XP 4.0.0 产品生命周期中演进。请参阅 /ga/org/jboss/eap/wildfly-galleon-pack 的索引。 您已创建了 Maven 项目,设置父依赖项,并添加了创建需要 HTTP 身份验证的应用程序的依赖项。请参阅 创建可引导 JAR Maven 项目。
重要在设置 Maven 项目时,您必须在 Maven archetype 配置中指定 HTTP 身份验证值。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意流程中显示的示例指定以下属性:
-
${bootable.jar.maven.plugin.version}
用于 Maven 插件版本。 -
${jboss.xp.galleon.feature.pack.version}
用于 Galleon 功能软件包版本。
您必须在项目中设置这些属性。例如:
<properties> <bootable.jar.maven.plugin.version>6.1.2.Final-redhat-00001</bootable.jar.maven.plugin.version> <jboss.xp.galleon.feature.pack.version>4.0.0.GA-redhat-00002</jboss.xp.galleon.feature.pack.version> </properties>
<properties> <bootable.jar.maven.plugin.version>6.1.2.Final-redhat-00001</bootable.jar.maven.plugin.version> <jboss.xp.galleon.feature.pack.version>4.0.0.GA-redhat-00002</jboss.xp.galleon.feature.pack.version> </properties>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
流程
在
pom.xml
文件的<build
> 元素中添加以下内容。您必须指定任何 Maven 插件的最新版本,以及org.jboss.eap:wildfly-galleon-pack
Galleon 功能软件包的最新版本。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例显示包含包含
elytron
子系统的datasources-web-server
Galleon 层。更新
src/main/webapp/WEB-INF
目录中的web.xml
文件。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建用于存储 Java 文件的目录:
mkdir -p APPLICATION_ROOT/src/main/java/com/example/authentication/
$ mkdir -p APPLICATION_ROOT/src/main/java/com/example/authentication/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
APPLICATION_ROOT
是 Maven 项目的根目录。创建包含以下内容的 Java 文件
TestServlet.java
,并将该文件保存到APPLICATION_ROOT/src/main/java/com/example/authentication/
目录中。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个 CLI 脚本,如
authentication.cli
,并将它保存到可引导 JAR 的可访问目录中,如APPLICATION_ROOT/scripts
目录。该脚本必须包含以下命令:/subsystem=elytron/properties-realm=bootable-realm:add(users-properties={relative-to=jboss.server.config.dir, path=bootable-users.properties, plain-text=true}, groups-properties={relative-to=jboss.server.config.dir, path=bootable-groups.properties}) /subsystem=elytron/security-domain=BootableDomain:add(default-realm=bootable-realm, permission-mapper=default-permission-mapper, realms=[{realm=bootable-realm, role-decoder=groups-to-roles}]) /subsystem=undertow/application-security-domain=other:write-attribute(name=security-domain, value=BootableDomain)
/subsystem=elytron/properties-realm=bootable-realm:add(users-properties={relative-to=jboss.server.config.dir, path=bootable-users.properties, plain-text=true}, groups-properties={relative-to=jboss.server.config.dir, path=bootable-groups.properties}) /subsystem=elytron/security-domain=BootableDomain:add(default-realm=bootable-realm, permission-mapper=default-permission-mapper, realms=[{realm=bootable-realm, role-decoder=groups-to-roles}]) /subsystem=undertow/application-security-domain=other:write-attribute(name=security-domain, value=BootableDomain)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在插件 <configuration> 元素
中添加以下
配置提取:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 本例演示了
authentication.cli
CLI 脚本,它将默认undertow
安全域配置为为您的服务器定义的安全域。注意您可以选择在运行时执行 CLI 脚本,而不是打包时间。为此,请跳过这一步,然后继续下一步 10。
在 Maven 项目的根目录中,创建一个目录来存储 JBoss EAP JAR Maven 插件添加到可引导 JAR 中的属性文件:
mkdir -p APPLICATION_ROOT/extra-content/standalone/configuration/
$ mkdir -p APPLICATION_ROOT/extra-content/standalone/configuration/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
APPLICATION_ROOT
是包含应用的pom.xml
配置文件的目录。此目录存储文件,如
bootable-users.properties
和bootable-groups.properties
文件。bootable-users.properties
文件包含以下内容:testuser=bootable_password
testuser=bootable_password
Copy to Clipboard Copied! Toggle word wrap Toggle overflow bootable-groups.properties
文件包含以下内容:testuser=Users
testuser=Users
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将以下
extra-content-content-dirs
元素添加到现有 <configuration>
元素中:<extra-server-content-dirs> <extra-content>extra-content</extra-content> </extra-server-content-dirs>
<extra-server-content-dirs> <extra-content>extra-content</extra-content> </extra-server-content-dirs>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow extra-content
目录包含属性文件。将应用打包为可引导 JAR。
mvn package
$ mvn package
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动应用程序:
mvn wildfly-jar:run
mvn wildfly-jar:run
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您选择了跳过第 6 步,且在构建期间没有执行 CLI 脚本,使用以下命令启动应用程序:
mvn wildfly-jar:run -Dwildfly.bootable.arguments=--cli-script=scripts/authentication.cli
mvn wildfly-jar:run -Dwildfly.bootable.arguments=--cli-script=scripts/authentication.cli
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 调用 servlet,但不指定凭证:
curl -v http://localhost:8080/hello
curl -v http://localhost:8080/hello
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出:
HTTP/1.1 401 Unauthorized ... WWW-Authenticate: Basic realm="Example Realm"
HTTP/1.1 401 Unauthorized ... WWW-Authenticate: Basic realm="Example Realm"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 调用服务器并指定您的凭证。例如:
curl -v -u testuser:bootable_password http://localhost:8080/hello
$ curl -v -u testuser:bootable_password http://localhost:8080/hello
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 返回 HTTP 200 状态,表示为可引导 JAR 启用了 HTTP 身份验证。例如:
HTTP/1.1 200 OK .... Hello testuser
HTTP/1.1 200 OK .... Hello testuser
Copy to Clipboard Copied! Toggle word wrap Toggle overflow