`

编程实现basic客户端认证

阅读更多
下面我们来示范一下如何使用basic认证。假设我们在basic.jsp中需要远程调用http://localhost:8080/ch104 /admin.jsp的内容。这时为了能够通过Spring Security的权限检测,我们需要在请求的头部加上basic所需的认证信息。

String username = "admin";
String password = "admin";
byte[] token = (username + ":" + password).getBytes("utf-8");
String authorization = "Basic " + new String(Base64.encodeBase64(token), "utf-8");

URL url = new URL("http://localhost:8080/ch104/admin.jsp");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Authorization", authorization);


我们先将用户名和密码拼接成一个字符串,两者之间使用“:”分隔。

然后使用commons-codec的Base64将这个字符串加密。在进行basic认证的时候Spring Security会使用commons-codec把这段字符串反转成用户名和密码,再进行认证操作。

下一步为加密后得到的字符串添加一个前缀"Basic ",这样Spring Security就可以通过这个判断客户端是否使用了basic认证。



将上面生成的字符串设置到请求头部,名称为“Authorization”。Spring Security会在认证时,获取头部信息进行判断。

下面是通过鉴权认证访问指定地址的代码:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

//import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import org.apache.commons.codec.binary.Base64;
//import org.apache.taglibs.standard.lang.jpath.adapter.Convert;

/**
 * This is a stub class with a main method to run an iDigi web service.
 */
public class PostTest {

	/**
	 * Run the web service request
	 */
	public static void main(String[] args) {

		try {
			// Create url to the iDigi server for a given web service request
			URL url = new URL("http://developer.idigi.com:80/ws/sci");
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setDoOutput(true);
			conn.setRequestMethod("POST"); 
			String username = "admin";
			String password = "admin";
			byte[] token = (username + ":" + password).getBytes("utf-8");
			String encodedAuthorization = new String(Base64.encodeBase64(token), "utf-8");
			conn.setRequestProperty("Authorization", "Basic "+ encodedAuthorization);
			 // Send data to server
		  	conn.setRequestProperty("Content-Type", "text/xml");
			OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
			out.write("<!-- \r\n");
			out.write("See http://www.digi.com/wiki/developer/index.php/Rci for\r\n");
			out.write("an example of a python implementation on a NDS device to\r\n");
			out.write("handle this SCI request\r\n");
			out.write("-->\r\n");
			out.write("<sci_request version=\"1.0\">\r\n");
			out.write("  <send_message>\r\n");
			out.write("    <targets>\r\n");
			out.write("      <device id=\"00000000-00000000-00409DFF-FF4A4244\"/>\r\n");
			out.write("    </targets>\r\n");
			out.write("    <rci_request version=\"1.1\">\r\n");
			out.write("      <do_command target=\"idigi_dia\">\r\n");
			out.write("        <channel_dump/>\r\n");
			out.write("      </do_command>\r\n");
			out.write("    </rci_request>\r\n");
			out.write("  </send_message>\r\n");
			out.write("</sci_request>\r\n");
			out.close();
			// Get input stream from response and convert to String
			conn.disconnect();
			conn.setDoInput(true);
			InputStream is = conn.getInputStream();
			Scanner isScanner = new Scanner(is);
			StringBuffer buf = new StringBuffer();
			while(isScanner.hasNextLine()) {	
				buf.append(isScanner.nextLine() +"\n");
			}
			String responseContent = buf.toString();
			// Output response to standard out
			System.out.println(responseContent);
		} catch (IOException e) { 
			// Print any exceptions that occur
			e.printStackTrace();
		}
	}
}
分享到:
评论

相关推荐

    VB网络数据库编程服务器与客户端

    本项目“VB网络数据库编程服务器与客户端”着重于通过VB实现服务器和客户端之间的数据通信,以实现高效、可靠的数据库应用。 首先,我们要了解VB中的数据库访问技术。在VB中,最常用的是ADO(ActiveX Data Objects...

    ONVIF客户端最新C++实现

    在"ONVIF客户端最新C++实现"这个项目中,我们将深入探讨如何使用C++编程语言来实现这些功能。 首先,我们需要理解ONVIF的核心协议,它基于SOAP(Simple Object Access Protocol)和HTTP,以XML数据格式交换信息。...

    java 发送带Basic Auth认证的http post请求实例代码

    在Java编程中,有时我们需要向HTTP服务器发送带有特定身份验证的POST请求,例如使用Basic Authentication。在这种情况下,我们可以使用Apache HttpClient库来实现。下面将详细解释如何使用Java发送带Basic Auth认证...

    msn 客户端协议实现(源代码+dll+例子程序)

    MSN客户端协议实现是一个涉及到计算机网络通信和编程技术的主题,尤其关注于.NET框架下的实现。MSN,全称为Microsoft Network,曾是微软提供的一项即时通讯服务,它使用特定的协议进行数据交换,允许用户进行文本...

    seafile私有云的api的C#客户端实现

    总的来说,"seafile私有云的api的C#客户端实现"是一个涉及网络通信、HTTP请求、JSON解析、认证机制以及服务调用的综合项目。通过.WCFRestFulClient_for_seafile这个文件,我们可以快速地集成和管理对Seafile私有云的...

    NTRIPClient0.zip

    NTRIPClient0.zip是一个压缩包,包含了一组用Visual Basic(VB)编写的源代码,专为初学者设计,用于实现NTRIP客户端的功能。下面将详细介绍NTRIP协议、VB编程基础以及如何利用这些源代码学习和理解NTRIP客户端的...

    vb精彩编程200例

    《VB精彩编程200例》是一份专为VB(Visual Basic)编程爱好者和学习者准备的宝贵资源,旨在通过200个精心挑选的实例,帮助读者深入理解和掌握VB编程的基本技巧和高级应用。VB,全称为Visual Basic,是微软公司推出的...

    远程控制(visual basic)

    开发者可能使用Visual Basic的Socket编程来建立客户端与服务器之间的连接,用控件和事件处理来实现交互,使用GDI+或者DirectX进行屏幕捕获和传输,以及可能的加密库来保证数据的安全。对于初学者来说,研究这样的...

    OPC客户端的例子

    本压缩包提供的"OPC客户端的例子"是一个VB6(Visual Basic 6)开发的 OPC DA(Data Access)客户端示例代码,对于初学者来说,是学习如何使用OPC技术连接和交互数据的宝贵资源。 在VB6DAautoSample_v3.1(v5)中,...

    VB做的OPC客户端

    VB(Visual Basic)是微软开发的一种编程语言,非常适合创建用户友好的图形界面。在这个VB做的OPC客户端程序中,我们可以深入探讨以下几个关键知识点: 1. **VB OPC客户端基础**:VB作为开发工具,通过OPC ...

    模拟Digest认证的登录demo

    - 如果海康NVR有额外的安全措施,比如API密钥或特定的认证格式,那么这些也需要在代码中实现。 文件名"HikvisionAutoCapture"可能是一个自动化捕捉或登录的脚本,可能是用来演示如何与海康NVR进行交互,获取摄像头...

    elasticsearch v2.2.0客户端

    9. 安全性:Elasticsearch v2.2.0客户端支持基本的认证和授权机制,如Basic Auth,可以通过客户端设置安全连接,保护数据安全。 10. 插件支持:Elasticsearch有许多官方和社区开发的插件,如Kibana(可视化)、...

    cxf webService客户端

    在CXF框架中,我们可以使用WS-I Basic Profile兼容的客户端API来实现这一功能。 创建CXF Web服务客户端的第一步是获取服务的WSDL(Web Service Description Language)文件。WSDL文件定义了服务的接口、操作、消息...

    Visual Basic 网络程序设计

    VB提供了Winsock控件,可以用来处理TCP和UDP通信,实现客户端和服务器间的交互。 2. **Winsock控件**:这是VB中用于网络编程的核心组件。通过设置Winsock控件的属性和方法,如LocalHost、LocalPort、RemoteHost、...

    Ruby-Savon是一个Ruby编程语言的SOAP客户端

    Ruby-Savon是Ruby编程语言中的一个强大的SOAP(Simple Object Access Protocol)客户端库,它使得在Ruby中与SOAP服务交互变得简单而高效。SOAP是一种基于XML的协议,用于在不同系统之间交换结构化和类型化的数据,常...

    opc 客户端 vb源代码

    VB(Visual Basic)是一种常用的编程语言,尤其在开发Windows应用程序方面非常流行。当这两者结合,VB可以作为OPC客户端,通过OPC接口与各种OPC服务器进行数据交互,实现对工业设备的控制和监控。 在这个"opc ...

    基于VS2015 visual basic的BR_OPC_UA客户端例程

    在本文中,我们将深入探讨如何使用Visual Studio 2015和Visual Basic开发一个BR OPC UA客户端应用程序。OPC UA(OPC统一架构)是一种开放的、跨平台的数据交换标准,用于工业自动化和其他领域的设备和系统之间的通信...

    FTP.rar_ftp_ftp客户端 vb

    在这个"FTP.rar_ftp_ftp客户端 vb"的压缩包中,我们可以找到一个使用VB(Visual Basic)编程语言实现的FTP客户端源代码。VB是Microsoft开发的一种面向对象的编程语言,非常适合初学者和专业开发者用于创建桌面应用。...

    Visual Basic6.0分布式应用程序开发

    了解网络编程的基本概念,如IP地址、端口号、套接字等,对于实现客户端-服务器通信至关重要。 7. **安全性考虑**:在分布式应用中,安全是一个不容忽视的话题。VB6.0提供了加密、认证和授权机制,开发者需要学习...

Global site tag (gtag.js) - Google Analytics