4.2.6. 使用 ElytronAuthenticator 传播身份
警告
由于 Java 8 中已知的凭证限制,不支持或推荐在 JBoss EAP 中使用 ElytronAuthenticator
。在使用此类传播身份时,请注意以下限制:
- 由于 Java 8 设计的限制,安全身份传播不适用于调用受保护 servlet。
-
不要在服务器上使用
ElytronAuthenticator
,如 EJB 中的 ElytronAuthenticator。 - 凭据缓存可能会影响其在独立客户端 JVM 中的使用。
JBoss EAP 7.1 引入了 ElytronAuthenticator
类,它使用当前安全上下文来执行身份验证。org.wildfly.security.auth.util.ElytronAuthenticator 类是 java.net.Authenticator 实施。
-
它有一个构造器
ElytronAuthenticator()
,用于构建新实例。 -
它有一个方法
getPasswordAuthentication()
,它返回PasswordAuthentication
实例。
以下是客户端代码示例,它创建并使用 ElytronAuthenticator
类向服务器传播身份:
示例:使用 ElytronAuthenticator 代码
// Create the authentication configuration
AuthenticationConfiguration httpConfig = AuthenticationConfiguration.empty().useName("bob");
// Create the authentication context
AuthenticationContext context = AuthenticationContext.captureCurrent().with(MatchRule.ALL, httpConfig.usePassword(createPassword(httpConfig, "secret")));
String response = context.run((PrivilegedExceptionAction<String>) () -> {
Authenticator.setDefault(new ElytronAuthenticator());
HttpURLConnection connection = HttpURLConnection.class.cast(new URL("http://localhost:" + SERVER_PORT).openConnection());
try (InputStream inputStream = connection.getInputStream()) {
return new BufferedReader(new InputStreamReader(inputStream)).lines().findFirst().orElse(null);
}
});