我们希望使用Spring安全性提供一项“身份验证”服务,
userid
添加到http标头中使用Spring实现这种转发的最简单方法是什么?
答案 0 :(得分:1)
对于此用例,我们可以创建一个新的Spring Boot应用程序(主要称为API网关)来启用Zuul代理(EnableZuulProxy)。创建一个自定义的Zuul PRE_TYPE
过滤器来解析所有传入的请求。其目的是检查传入请求是否包含令牌,然后调用身份验证服务,检索调用者的信息,并将用户的标识符添加到自定义标头中。
一旦传入的请求通过所有过滤器,然后使用zuul.routes.*
属性将请求转发到适当的服务。
要调用远程服务(在本例中为Authentication Service),我们可以使用Spring的RemoteTokenServices类。并且,BearerTokenExtractor类用于从传入请求中提取令牌。这是使您入门的示例代码:
@Override
public Object run() {
final RequestContext requestContext = RequestContext.getCurrentContext();
final HttpServletRequest request = removeCustomHeaders(requestContext.getRequest());
requestContext.setRequest(request);
final Authentication authentication = tokenExtractor.extract(request);
if (Objects.nonNull(authentication)) {
try {
final OAuth2Authentication oAuth2Authentication = tokenServices.loadAuthentication(authentication.getPrincipal().toString());
final Map<String, String> userAuthDetails = (Map<String, String>) oAuth2Authentication.getUserAuthentication().getDetails();
requestContext.addZuulRequestHeader(USERNAME_HEADER, oAuth2Authentication.getPrincipal().toString());
// Add other required information in headers.
}
catch(final AuthenticationException | RestClientException |OAuth2Exception e){