Spring Security oauth2(二)使用get方式请求oauth2默认的认证接口/oauth/token

本文深入探讨了Spring Security OAuth2的认证接口,分析了默认的/oauth/token接口只支持POST请求的原因。通过源码解析,了解到不允许GET请求是由于框架内部配置。随后,通过修改TokenEndpoint允许GET请求,并进行了测试,验证了GET请求的实现。文章旨在帮助读者理解OAuth2认证流程及接口工作原理。
摘要由CSDN通过智能技术生成

在我们上篇文章中,我们作为快速入门
pring Security oauth2(一)快速入门,搭建授权服务器
讲了4中授权模式,接下来的篇章中,我们将会逐步的去一个一个问题解决,并且去扩展
接下来我们将要解决的第一个问题,就是关于于oauth2默认的认证接口。

1.观察oauth2认证接口地址

观察我们的每一种授权模式的请求地址。我们不难发现,请求地址就是如下两个。
授权码模式,我们请求了如下地址
http://127.0.0.1:8080/oauth/authorize
http://127.0.0.1:8080/oauth/token
简化模式
http://127.0.0.1:8080/oauth/authorize
客户端模式
http://127.0.0.1:8080/oauth/token
密码模式
http://127.0.0.1:8080/oauth/token
而当我们项目启动的时候,我们也能看到如下信息
在这里插入图片描述
这个"/oauth/token"地址是不是特别熟悉?并且为什么我们非得去请求这个接口。显然是框架给我们写好了这个接口呗,然后我们去访问这个接口,他帮我们来认证。

2.认识TokenEndpoint类

该类的全路径地址如下

org.springframework.security.oauth2.provider.endpoint.TokenEndpoint

在这里插入图片描述

进来第一个疑问,frameworkendpoint 是什么啊?

2.1.@frameworkendpoint 的作用?

@Controller的同义词,但仅用于框架提供的端点(因此它永远不会与用@Controller定义的用户自己的端点冲突)。
与@RequestMapping和所有其他@Controller功能一起使用
所以我们为了方便看代码,就把@frameworkendpoint当作@Controller来看待,差不多用于提供mvc接口的注解。

2.2.get方式可以请求/oauth/token吗?

相信进来一看,粗布一看,有get请求,和post请求,心里可能犯嘀咕,为啥之前的入门中,作者非得用post,而不用get请求,TokenEndpoint不是提供了get方式吗?
现在我们尝试下用get来请求会发生什么?
在这里插入图片描述
在这里插入图片描述
好家伙,直接提示了不支持。神奇不?

仔细分析下,get请求接口是如何写的
在这里插入图片描述
仔细看源代码,源码中定义了一个allowedRequestMethods集合,里面放了post请求方式,
然后在get请求的时候,判断allowedRequestMethods中有没有get请求方式,如果没有get,则抛出异常,不支持get,如果支持则转入post方式进行请求。

2.3.设置get方式请求/oauth/token

通过观察上述代码,我们知道了不支持get方式请求,是因为allowedRequestMethods里面只有post。如果我们在allowedRequestMethods中添加get方式,就可以了。
在我们的认证服务器中,注入tokenEndpoint,并且修改tokenEndpoint的

	@Autowired
	private TokenEndpoint tokenEndpoint;
	/**
	 * @Description:对@RequestMapping(value = "/oauth/token", method=RequestMethod.GET)的方法进行get方法支持
	 * @author:hutao
	 * @mail:hutao_2017@aliyun.com
	 * @date:2021年4月23日
	 */
    @PostConstruct
    public void reconfigure() {
        Set<HttpMethod> allowedMethods =new HashSet<>(Arrays.asList(HttpMethod.GET, HttpMethod.POST));
        tokenEndpoint.setAllowedRequestMethods(allowedMethods);
    }

在这里插入图片描述

2.4.测试使用get和post方式请求/oauth/token

浏览器get请求
在这里插入图片描述
postman get请求
在这里插入图片描述
postman post请求
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值