JSP开发中Apache-HTTPClient 用户验证的实例详解

下面是详细的“JSP开发中Apache-HTTPClient用户验证的实例详解”的攻略:

什么是Apache-HttpClient?

Apache-HttpClient是一个基于Java的Http客户端库。它提供了通过Http协议访问Web资源的方式,同时支持访问Https资源。

用户验证的作用

通过用户验证,我们可以将访问Web资源的操作限制在特定用户范围内,只允许特定的用户进行访问,从而保证Web资源的安全性。

Apache-HttpClient用户验证的实现方式

在Apache-HttpClient中,用户验证可以通过如下几种方式进行实现:

  1. Basic Authentication:基于用户名和密码的简单认证方式。
  2. Digest Authentication:基于哈希算法的消息摘要认证方式。
  3. NTLM Authentication:基于微软NTLM认证方式。

Basic Authentication实现方式

基于用户名和密码的简单认证方式,通过在Http请求头中添加"Authorization"信息来携带用户的认证信息。

在Apache-HttpClient中,可以通过如下方式进行Basic Authentication实现:

import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.impl.client.BasicAuthCache;
import org.apache.http.impl.client.BasicAuthCache;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.client.AuthCache;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.HttpClientContext;

HttpHost targetHost = new HttpHost("localhost", 8080, "http");
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
        new AuthScope(targetHost.getHostName(), targetHost.getPort()),
        new UsernamePasswordCredentials("username", "password"));

CloseableHttpClient httpclient = HttpClients.custom()
        .setDefaultCredentialsProvider(credsProvider)
        .build();

AuthCache authCache = new BasicAuthCache();
authCache.put(targetHost, new BasicScheme());

// Create ClientContext and add it to the context
HttpClientContext context = HttpClientContext.create();
context.setCredentialsProvider(credsProvider);
context.setAuthCache(authCache);

HttpGet httpget = new HttpGet("/secure/");
HttpResponse response = httpclient.execute(targetHost, httpget, context);

上述代码中,我们首先创建了一个HttpHost对象,指定要访问的Web资源的主机名和端口号,接着创建了CredentialsProvider对象,将用户名和密码加入到该对象中。最后创建了CloseableHttpClient对象并使用setDefaultCredentialsProvider()函数将该对象与认证信息绑定,再使用HttpClients工具类提供的custom()函数进行创建。

在创建好CloseableHttpClient对象后,我们还需实现AuthCache对象,该对象为认证缓存对象,用来缓存认证信息,从而减少认证的次数。最后,我们创建了一个HttpClientContext对象,并将之前创建的CredentialsProvider对象和AuthCache对象关联到该对象中。

我们接着创建了一个HttpGet对象,用于表示要访问的Web资源的请求,并将之前创建的HttpClientContext对象传递给execute()函数执行请求。这样,在执行完请求后,所有的认证信息都将缓存在AuthCache中,从而可以减少认证的次数。

Digest Authentication实现方式

基于哈希算法的消息摘要认证方式,通过在Http请求头中携带经过摘要算法处理的验证信息来实现的。

在Apache-HttpClient中,可以通过如下方式进行Digest Authentication实现:

import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.HttpGet;

CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY,
        new UsernamePasswordCredentials("username", "password"));
CloseableHttpClient httpclient = HttpClients.custom()
        .setDefaultCredentialsProvider(credsProvider)
        .build();

HttpGet httpget = new HttpGet("http://localhost/");

System.out.println("Executing request " + httpget.getRequestLine());
CloseableHttpResponse response = httpclient.execute(httpget);
try {
    HttpEntity entity = response.getEntity();

    System.out.println("----------------------------------------");
    System.out.println(response.getStatusLine());
    EntityUtils.consume(entity);
} finally {
    response.close();
}

上述代码中,我们首先创建了一个CredentialsProvider对象,将用户名和密码加入到该对象中。接着创建了CloseableHttpClient对象并使用setDefaultCredentialsProvider()函数将该对象与认证信息绑定,再使用HttpClients工具类提供的custom()函数进行创建。

最后,我们创建了一个HttpGet对象用于表示要访问的Web资源的请求,并执行该请求以获取响应结果。

NTLM Authentication实现方式

基于微软NTLM认证方式,主要利用域名、用户名和密码提供认证信息,与Windows操作系统内置的用户身份验证机制相同。

在Apache-HttpClient中,可以通过如下方式进行NTLM Authentication实现:

import org.apache.http.auth.AuthScope;
import org.apache.http.auth.NTCredentials;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.HttpGet;

CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY,
        new NTCredentials("user", "pwd", "workstation", "domain"));
CloseableHttpClient httpclient = HttpClients.custom()
        .setDefaultCredentialsProvider(credsProvider)
        .build();

HttpGet httpget = new HttpGet("http://localhost/");

System.out.println("Executing request " + httpget.getRequestLine());
CloseableHttpResponse response = httpclient.execute(httpget);
try {
    HttpEntity entity = response.getEntity();

    System.out.println("----------------------------------------");
    System.out.println(response.getStatusLine());
    EntityUtils.consume(entity);
} finally {
    response.close();
}

上述代码中,我们首先创建了一个CredentialsProvider对象,将用户名和密码加入到该对象中。接着创建了CloseableHttpClient对象并使用setDefaultCredentialsProvider()函数将该对象与认证信息绑定,再使用HttpClients工具类提供的custom()函数进行创建。

最后,我们创建了一个HttpGet对象用于表示要访问的Web资源的请求,并执行该请求以获取响应结果。

两条实例说明:

  1. 假设我们的Web资源需要进行Basic Authentication认证,我们可以使用如下代码进行访问:
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.HttpGet;

CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY,
        new UsernamePasswordCredentials("username", "password"));
CloseableHttpClient httpclient = HttpClients.custom()
        .setDefaultCredentialsProvider(credsProvider)
        .build();

HttpGet httpget = new HttpGet("https://example.com/secure");

System.out.println("Executing request " + httpget.getRequestLine());
CloseableHttpResponse response = httpclient.execute(httpget);
try {
    HttpEntity entity = response.getEntity();

    System.out.println("----------------------------------------");
    System.out.println(response.getStatusLine());
    EntityUtils.consume(entity);
} finally {
    response.close();
}

上述代码中,我们首先创建了一个BasicCredentialsProvider对象,并将要使用的用户名和密码加入到该对象中。接着创建了一个CloseableHttpClient对象,并将之前创建的BasicCredentialsProvider对象与该对象绑定。

最后,我们创建了一个HttpGet对象,用于表示要访问的Web资源的请求,并在执行该请求时,通过HttpClient执行Basic Authentication认证。

  1. 假设我们的Web资源需要进行Digest Authentication认证,我们可以使用如下代码进行访问:
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.HttpGet;

CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY,
        new UsernamePasswordCredentials("username", "password"));
CloseableHttpClient httpclient = HttpClients.custom()
        .setDefaultCredentialsProvider(credsProvider)
        .build();

HttpGet httpget = new HttpGet("https://example.com/secure");

System.out.println("Executing request " + httpget.getRequestLine());
CloseableHttpResponse response = httpclient.execute(httpget);
try {
    HttpEntity entity = response.getEntity();

    System.out.println("----------------------------------------");
    System.out.println(response.getStatusLine());
    EntityUtils.consume(entity);
} finally {
    response.close();
}

上述代码中,我们首先创建了一个BasicCredentialsProvider对象,并将要使用的用户名和密码加入到该对象中。接着创建了一个CloseableHttpClient对象,并将之前创建的BasicCredentialsProvider对象与该对象绑定。

最后,我们创建了一个HttpGet对象,用于表示要访问的Web资源的请求,并在执行该请求时,通过HttpClient执行Digest Authentication认证。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JSP开发中Apache-HTTPClient 用户验证的实例详解 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Java编程生产者消费者实现的四种方法

    Java编程生产者消费者实现的四种方法 生产者消费者问题是指在生产者和消费者之间同步的问题。生产者一直在生产消息,消费者一直在从队列中取走消息,并且队列中只能存储有限的消息。Java中提供了多种实现生产者消费者问题的方法,具体如下: 方法一:使用wait()和notify()方法 这是最基本的一种实现方式。使用wait()方法让生产者线程等待,当消息队列满时…

    Java 2023年5月18日
    00
  • JAVA文件读写操作详解

    JAVA文件读写操作详解 什么是文件读写操作 文件读写操作是指对于指定的文件,通过程序的方式读取其中的数据或者将程序中的数据写入到文件中。文件读写操作是一个底层的技术,基本上所有的软件开发都会用到这个技术。 JAVA文件读写操作的常用类 在JAVA中,文件读写操作主要涉及到以下几个类: File类:代表文件和目录的抽象表示。通过对File类的操作,可以创建、…

    Java 2023年5月20日
    00
  • mybatis的动态sql详解(精)

    下面是针对“Mybatis的动态SQL详解(精)”的完整攻略。 什么是Mybatis动态SQL Mybatis动态SQL是指可以根据不同条件来构建SQL语句的一种特殊方式。简单来说,根据我们提供的条件,Mybatis会动态地生成一个SQL语句来执行。 动态SQL的使用场景 动态SQL的使用场景包括了任何需要根据条件动态构建SQL的情况,比如: 复杂的多条件查…

    Java 2023年5月20日
    00
  • Java中PrintWriter使用方法介绍

    Java中PrintWriter使用方法介绍 PrintWriter是Java IO包中的一个类,提供了许多用于打印输出的方法。在Java中,我们通常使用System.out来进行输出,但是PrintWriter提供了更多的选择和定制化能力。 PrintWriter的构造方法 PrintWriter有很多构造方法,其中最常见的两种为: PrintWriter…

    Java 2023年5月20日
    00
  • POI通用导出Excel(.xls,.xlsx)的方法

    当我们需要将数据导出为Excel文件时,利用Apache POI这个强大的Java API可以快速简便地完成。以下是POI通用导出Excel(.xls,.xlsx)的方法攻略。 引入依赖 首先需要在Maven中引入POI的依赖: <dependency> <groupId>org.apache.poi</groupId> …

    Java 2023年5月20日
    00
  • 基于JVM-jinfo的使用方式

    基于JVM的jinfo工具可以帮助我们在运行中的JVM进程中实时查看和修改指定Java进程的配置参数,以及输出JVM内部配置信息和线程堆栈信息等。 以下是使用jinfo的步骤: 步骤一:查看运行中的JVM进程 在使用jinfo工具前,需要先确认当前运行中的JVM进程PID。可以使用jps命令查看,例如: $ jps 2386 Bootstrap 2834 J…

    Java 2023年5月26日
    00
  • Spring Boot如何使用Undertow代替Tomcat

    使用Undertow代替Tomcat是Spring Boot提高应用性能以及减少内存消耗的一种方式。下面是Spring Boot如何使用Undertow代替Tomcat的完整攻略: 1. 添加Undertow依赖 在Spring Boot项目的pom.xml文件中添加以下依赖: <dependency> <groupId>org.sp…

    Java 2023年6月2日
    00
  • MyBatis无缝对接Spring的方法

    MyBatis是Java中使用最广泛的ORM框架之一。该框架提供了简单易用的映射工具,可以帮助我们轻松实现实体类到数据库表之间的映射。同时,Spring是一种非常流行的Java开发框架,可以提供依赖注入、AOP等功能,使得Java应用变得更加易于开发和维护。这里我们将介绍如何将MyBatis与Spring框架结合使用,以便更好地开发Web应用。 以下是MyB…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部