SpringSecurityOAuth2.0发放令牌接口地址自定义

编程

@RequestMapping(value = "/oauth/token", method=RequestMethod.POST)

public ResponseEntity<OAuth2AccessToken> postAccessToken(Principal principal, @RequestParam

Map<String, String> parameters){

...

return getResponse(token);

}

自定义默认获取令牌地址

  • 如上文,默认情况下我们需要访问 /oauth/token 获取,也就是所有业务系统的 “登录”接口 都变成这个地址,如何在不重写此接口的情况下,自定义路径地址。

  • Spring Security OAuth2 为我们提供了丰富的 配置,我们可以在 AuthorizationServerConfigurerAdapter 设置所有内置端点 (Endpoint)路径的自定义 pathMapping

  • 如下 使用 /pig4cloud/login 覆盖 原有的/oauth/token,注意这里是覆盖一旦配置 原有路径将失效

@EnableAuthorizationServer

public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {

@Override

public void configure(AuthorizationServerEndpointsConfigurer endpoints) {

endpoints

.allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST)

.pathMapping("/oauth/token","/pig4cloud/login"); }

}

  • 获取令牌地址就变成如下

curl --location --request POST "http://oauth-server/pig4cloud/login" 

--header "Authorization: Basic dGVzdDp0ZXN0"

--data-urlencode "username=admin"

--data-urlencode "password=123456"

--data-urlencode "scope=server"

--data-urlencode "grant_type=password"

源码剖析

  • spring security oauth2 是如何实现 这种端点自定义配置的呢?

  • AuthorizationServerEndpointsConfigurer 被写入到自定义 HandlerMapping

private FrameworkEndpointHandlerMapping frameworkEndpointHandlerMapping() {

if (frameworkEndpointHandlerMapping == null) {

frameworkEndpointHandlerMapping = new FrameworkEndpointHandlerMapping();

frameworkEndpointHandlerMapping.setMappings(patternMap);

frameworkEndpointHandlerMapping.setPrefix(prefix);

frameworkEndpointHandlerMapping.setInterceptors(interceptors.toArray());

}

return frameworkEndpointHandlerMapping;

}

  • SpringMVC DispatcherServlet 会根据新的规则 进行路由

项目推荐: Spring Cloud 、Spring Security OAuth2的RBAC权限管理系统 欢迎关注

以上是 SpringSecurityOAuth2.0发放令牌接口地址自定义 的全部内容, 来源链接: utcz.com/z/516239.html

回到顶部