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

在我们上篇文章中,我们作为快速入门
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
而当我们项目启动的时候,我们也能看到如下信息
Spring Security oauth2(二)使用get方式请求oauth2默认的认证接口/oauth/token_第1张图片
这个"/oauth/token"地址是不是特别熟悉?并且为什么我们非得去请求这个接口。显然是框架给我们写好了这个接口呗,然后我们去访问这个接口,他帮我们来认证。

2.认识TokenEndpoint类

该类的全路径地址如下

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

Spring Security oauth2(二)使用get方式请求oauth2默认的认证接口/oauth/token_第2张图片

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

2.1.@frameworkendpoint 的作用?

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

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

相信进来一看,粗布一看,有get请求,和post请求,心里可能犯嘀咕,为啥之前的入门中,作者非得用post,而不用get请求,TokenEndpoint不是提供了get方式吗?
现在我们尝试下用get来请求会发生什么?
Spring Security oauth2(二)使用get方式请求oauth2默认的认证接口/oauth/token_第3张图片
Spring Security oauth2(二)使用get方式请求oauth2默认的认证接口/oauth/token_第4张图片
好家伙,直接提示了不支持。神奇不?

仔细分析下,get请求接口是如何写的
Spring Security oauth2(二)使用get方式请求oauth2默认的认证接口/oauth/token_第5张图片
仔细看源代码,源码中定义了一个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:[email protected]
	 * @date:2021年4月23日
	 */
    @PostConstruct
    public void reconfigure() {
        Set<HttpMethod> allowedMethods =new HashSet<>(Arrays.asList(HttpMethod.GET, HttpMethod.POST));
        tokenEndpoint.setAllowedRequestMethods(allowedMethods);
    }

Spring Security oauth2(二)使用get方式请求oauth2默认的认证接口/oauth/token_第6张图片

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

浏览器get请求
Spring Security oauth2(二)使用get方式请求oauth2默认的认证接口/oauth/token_第7张图片
postman get请求
Spring Security oauth2(二)使用get方式请求oauth2默认的认证接口/oauth/token_第8张图片
postman post请求
Spring Security oauth2(二)使用get方式请求oauth2默认的认证接口/oauth/token_第9张图片

你可能感兴趣的:(Spring,Spring,Security,oauth2,java,c#,rabbitmq)