OAuth2.0 授权模式,基于HttpClient 实现

2023-11-07

功能代码如下:

package com.zzg.ucas.config;

import java.io.IOException;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

/**
 * oauth2 客户端工具类
 * 
 * @author zzg
 *
 */
public class OAuthClientUtil {
	static String accessTokenURL = "http://cas.example.org:8099/cas/oauth2.0/accessToken";
	static String client_id = "key";
	static String client_secret = "secret";
	static String username = "admin";
	static String password = "123456";
	
	// 基于password 模式
	public static void main1(String[] args) {
		String grant_type = "password";
		CloseableHttpClient httpClient = HttpClients.createDefault();
		String url = "http://cas.example.org:8099/cas/oauth2.0/accessToken?client_id=" + client_id + "&grant_type="
				+ grant_type + "&username=" + username + "&password=" + password;
		HttpPost httpPost = new HttpPost(url);
		HttpResponse response = null;
		try {
			response = httpClient.execute(httpPost);
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String result = "";
		if (response.getStatusLine().getStatusCode() == 200) {
			try {
				result = EntityUtils.toString(response.getEntity(), "UTF-8");
				// 解析token的json数据
				System.out.println("result:" + result);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	// 基于client_credentials
	public static void main2(String[] args) {
		String grant_type = "client_credentials";
		CloseableHttpClient httpClient = HttpClients.createDefault();
		String url = "http://cas.example.org:8099/cas/oauth2.0/accessToken?client_id=" + client_id + "&grant_type="
				+ grant_type + "&client_secret=" + client_secret;
		HttpPost httpPost = new HttpPost(url);
		HttpResponse response = null;
		try {
			response = httpClient.execute(httpPost);
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String result = "";
		if (response.getStatusLine().getStatusCode() == 200) {
			try {
				result = EntityUtils.toString(response.getEntity(), "UTF-8");
				// 解析token的json数据
				System.out.println("result:" + result);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	
	// 基于refresh_token
	public static void main3(String[] args) {
		String grant_type = "refresh_token";
		String refresh_token = "RT-1-W7-9xisPcnQqLfyH2RIpAnnc7aWVPOtP";
		CloseableHttpClient httpClient = HttpClients.createDefault();
		String url = "http://cas.example.org:8099/cas/oauth2.0/accessToken?client_id=" + client_id + "&grant_type="
				+ grant_type + "&client_secret=" + client_secret + "&refresh_token=" + refresh_token;
		HttpPost httpPost = new HttpPost(url);
		HttpResponse response = null;
		try {
			response = httpClient.execute(httpPost);
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String result = "";
		if (response.getStatusLine().getStatusCode() == 200) {
			try {
				result = EntityUtils.toString(response.getEntity(), "UTF-8");
				// 解析token的json数据
				System.out.println("result:" + result);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	// 基于/oauth2.0/profile, 获取用户信息
	public static void main(String[] args) {

		String access_token = "AT-2-ArvJnVOylh-qizLsOBv0UrqCzEEjyJuP";
		CloseableHttpClient httpClient = HttpClients.createDefault();
		String url = "http://cas.example.org:8099/cas/oauth2.0/profile?access_token=" + access_token;
		HttpGet httpGet = new HttpGet(url);
		
		HttpResponse response = null;
		try {
			response = httpClient.execute(httpGet);
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String result = "";
		if (response.getStatusLine().getStatusCode() == 200) {
			try {
				result = EntityUtils.toString(response.getEntity(), "UTF-8");
				// 解析token的json数据
				System.out.println("result:" + result);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OAuth2.0 授权模式,基于HttpClient 实现 的相关文章

  • cas 6.2 Incompatible because this component declares an API of a component compatible with Java 11

    最近用到cas6 2的项目 配置基本按下面的来 其中配置jdk什么的都是百度的 使用cas overlay template 6 2服务部署到整合cas client 爱学习的老王的博客 CSDN博客 cas overlay 但是导包出现国
  • Java 补全两个年份之间缺失的年份\计算两个日期相差年数

    计算两个日期相差年数 public static int yearDateDiff Date startDate Date endDate Calendar calBegin Calendar getInstance 获取日历实例 Cale
  • Cas服务端5.3 基于MySQL8数据库,实现用户认证

    第一步 Cas 服务端添加数据库认证依赖jar 文件 找到下图所示代码端 添加如下依赖jar包
  • SpringMVC+Spring+Mybatis +Annotation实现方法,按钮级别的细粒度权限控制

    本文转载自 http blog csdn net ycyk 168 article details 18456631 随着企业信息化的不断深入 各种各样的信息系统成为提高企业运营及管理效率的必备工具 越来越多的企业核心机密如销售机会 客户资
  • Java 依据文件名后缀,获取Content-Type/Mime类型

    枚举类代码MimeTypeEnum import org apache commons lang3 StringUtils import lombok Getter 依据文件后缀名返回ContentType author zzg Gette
  • (java功能篇)谷歌获取地址经纬度

    package com mohe map import java io BufferedReader import java io IOException import java io InputStreamReader import ja
  • Solr 检索结果集List<SolrDocument> 转换为指定业务对象总结

    前提说明 从solr结果集中取数据 取到了结果集 但是结果集是一个map 而我想要得到的是一个对象 怎么处理呢 我总计如下三种方法 第一种 solrDocument中提供了一个获取每个field对应值的方法 使用此方法获取所有的field对
  • Java内存模型,volatile关键字和CAS算法,

    引言 在前几篇博文中我详细介绍了HashMap的底层实现原理 后来我接连写了三天JVM和GC的一些知识 那些知识偏向于理论 今天换点口味 和大家一起研究学习一下ConcurrentHashMap的底层实现 因为jdk1 8在HashMap和
  • cas 5.2.0登陆界面添加验证码和校验功能

    本文分为4个部分 1 登录界面添加验证码 2 自定义登录对象 增加一个验证码字段 3 自定义cas的登录流程 完成自定义校验 4 返回自定错误信息 1 配置验证码 生成验证码 使用google的kaptcha 需引入jar的包如下
  • Java 获取过去12个月日期

    业务功能要求 查询前12个月的相关数据统计 前 12个月日期 LocalDate today LocalDate now for long i 0L i lt 11L i LocalDate localDate today minusMon
  • 悲观锁synchronized、乐观锁CAS

    1 悲观锁 乐观锁 悲观锁是一种思想 在多线程竞争下 加锁 释放锁会导致比较多的上下文切换和调度延时 引起性能问题 一个线程持有锁会导致其它所有需要此锁的线程挂起 如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置 引起性能
  • Java 读取jar内包资源文件和读取jar包外资源文件

    Java 读取jar包内资源文件 读取jar 包内资源文件application properties InputStream appPropertiesInputStream ApplicationPropertiesHolder cla
  • 如何实施单点登录

    我想实现 SSO 单点登录 我发现了很多关于 CAS OpenID 和许多不同事物的链接和文章 我真的迷失了那么我应该使用 CAS 吗 我安装了 CAS Server 并将其部署到 Tomcat 中 你下一步怎么做 或者这是错误的 您能解释
  • CodeIgniter 的 CAS 身份验证库

    我正在尝试在 CodeIgniter 应用程序中实现 CAS 身份验证 但我找不到当前是否有为其设置的库 我通过只包含类并添加一些肮脏的修复来进行管理 但如果有人知道合适的库 我认为这将是一个更干净的解决方案 我一直在浏览这里以及谷歌上的一
  • 如何使用 Devise 将 Rails 应用程序转变为 SSO/CAS 服务器?

    我从一个上一个问题我一直在问错误的问题 我想将我的应用程序变成 CAS 服务器 以便应用程序的管理员可以使用相同的身份验证机制来登录我们为组织开发的其他应用程序 你以前做过这个吗 是否有一个插件可以增加 Devise 充当 CAS 服务器的
  • 通过 JMH 测量 sun.misc.Unsafe.compareAndSwap 中的奇怪行为

    我决定使用不同的锁定策略来测量增量 并为此使用 JMH 我使用 JMH 来检查吞吐量和平均时间 并使用简单的自定义测试来检查正确性 有六种策略 原子数 读写锁定计数 与易失性同步 无易失性的同步块 sun misc Unsafe compa
  • 在 CAS 中,如果尚未接受协议,如何限制仅访问一项服务?

    有一个要求 用户应该首先接受一些许可协议 存在仅在服务中 以便能够登录所有其他服务 所以流程应该是 用户通过CAS登录 因为他还没有接受协议 所以只能登录serviceS 当他接受serviceA上的协议后 他也可以登录其他服务 Notes
  • 如何在 CAS 服务管理中注册我的 Web 应用程序?

    我的学校想要实现一个CAS服务 我做了大部分配置 但是我需要注册webapp 如何在CAS服务管理中注册webapp 或者如果您有一些可以帮助我的样本 我将非常感激 我尝试过使用 cas 管理应用程序 版本为 4 2 x 我不确定您想使用什
  • jasig cas 重定向过多问题

    我正在尝试使用 spring security 和 spring security cas 带有 Jasig CAS 的 SSO 来保护 spring boot Web 应用程序 尝试访问受保护的资源时 我遇到了太多重定向错误 该项目可用h
  • 通过cas进行ajax调用

    我需要编写一个谷歌小工具来读取谷歌群组的提要 问题是我正在进行 ajax 调用来检索提要 而我们的 google apps 域受 CAS 中央身份验证服务 保护 因此 我在拨打电话时收到 400 错误请求 我怀疑浏览器在进行 ajax 调用

随机推荐