当前位置: 首页 > news >正文

基于Http Basic Authentication的接口

Basic Authenrication是 HTTP 用户代理提供用户名的一种方法 ,它是对 Web 资源实施访问控制的最简单技术,它不需要 Cookie、会话标识符和登录页面。HTTP Basic身份验证使用静态的标准HTTP标头,这意味着 不必在预期中进行握手。

当用户代理想要发送服务器身份验证凭据时,它可能使用授权标头。授权标头 构造如下:

1)用户名和密码组合成一个字符串“用户名:密码”

2)使用Base64编码对生成的字符串进行编码

3)将授权方法和空格(即“基本”)放在编码字符串之前。

例如,如果用户代理使用“阿拉丁”作为用户名,使用“芝麻开门”作为密码,则标头的形成如下:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

下面,我们编写一个接口,和请求该接口的客户端代码

接口:

package com.java2novice.restful;import java.io.IOException;import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import sun.misc.BASE64Decoder;import com.java2novice.model.Order;@Path("/order-inventory")
public class OrderInventoryService {@GET@Path("/order/{orderId}")@Produces(MediaType.APPLICATION_JSON)public Object getUserById(@PathParam("orderId") Integer orderId, @HeaderParam("authorization") String authString){if(!isUserAuthenticated(authString)){return "{\"error\":\"User not authenticated\"}";}Order ord = new Order();ord.setCustmer("Java2Novice");ord.setAddress("Bangalore");ord.setAmount("$2000");return ord;}private boolean isUserAuthenticated(String authString){String decodedAuth = "";// 标头格式为“Basic 5tyc0uiDat4”// 我们需要在将数据解码回原始字符串之前提取数据String[] authParts = authString.split("\\s+");String authInfo = authParts[1];// 将数据解码回原始字符串byte[] bytes = null;try {bytes = new BASE64Decoder().decodeBuffer(authInfo);} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();}decodedAuth = new String(bytes);System.out.println(decodedAuth);/*** 此处包含验证用户身份验证的逻辑。* 它可以使用 ldap,或令牌交换机制或您的* 自定义身份验证机制。*/// 你的验证码放在这里......return true;}
}

客户端代码:

package com.java2novice.rest.client;import sun.misc.BASE64Encoder;import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;public class JersyGetClient {public static void main(String a[]){String url = "http://localhost:8080/RestfulWebServices/order-inventory/order/1016";String name = "java2novice";String password = "Simple4u!";String authString = name + ":" + password;String authStringEnc = new BASE64Encoder().encode(authString.getBytes());System.out.println("Base64 encoded auth string: " + authStringEnc);Client restClient = Client.create();WebResource webResource = restClient.resource(url);ClientResponse resp = webResource.accept("application/json").header("Authorization", "Basic " + authStringEnc).get(ClientResponse.class);if(resp.getStatus() != 200){System.err.println("Unable to connect to the server");}String output = resp.getEntity(String.class);System.out.println("response: "+output);}
}

除了Http Basic Authentication认证方法外,还有其他几种认证方式,详细请参考:

细说API – 认证、授权和凭证 - 知乎 (zhihu.com) 

 

链接:具有 HTTP 基本身份验证的 Restful Web 服务 - Java Restful Web Services (java2novice.com)

http://www.lryc.cn/news/185215.html

相关文章:

  • 【yaml文件的编写】
  • kt6368A双模蓝牙芯片无法透传 可能是什么问题呢
  • SpringBoot终极讲义第二章笔记
  • 【C++面向对象侯捷下】4. pointer-like classes,关于智能指针 | 5. function-like classes,所谓仿函数
  • 社科院与杜兰大学能源管理硕士项目——惊喜会随时间慢慢酝酿而出
  • Array简介
  • Django的模版使用(Django-03)
  • 详解分布式搜索技术之elasticsearch
  • 系统架构设计:3 软件架构建模技术与应用
  • JAVA在线电子病历编辑器源码 B/S架构
  • TS中的枚举是什么如何使用
  • UG\NX二次开发 重命名特征对象 UF_OBJ_set_name
  • 低欲望社会:只要我没欲望,世界就对我束手无策?
  • 抢红包设计
  • k8s集群-6(daemonset job cronjob控制器)
  • Compose 编译器版本和Kotlin版本对应关系
  • vite+vue+cesium
  • tcp滑动窗口原理
  • 3.4 Android bpfloader初始化流程解读(二)
  • Linux0.12内核源码解读(2)-Bootsect.S
  • 虚拟环境搭建、后台项目创建及目录调整、封装logger、封装全局异常、封装Response、后台数据库创建
  • 每日一练 | 网络工程师软考真题Day39
  • Android Studio编写xml布局不提示控件的部分属性问题的解决
  • BUGKU-simple_SSTI_1漏洞注入
  • Python:dict
  • git和svn 的国内的下载地址
  • matplotlib制图进阶版
  • 【Java 进阶篇】HTML介绍与软件架构相关知识详解
  • Python数据攻略-Pandas与机器学习数据准备
  • 阿里云/亚马逊云代理:aws账号购买:aws亚马逊云账号的优势