Spring boot 如何在Spring云微服务中获取当前登录用户?
我有一个Spring boot 如何在Spring云微服务中获取当前登录用户?,spring-boot,spring-cloud,netflix-zuul,Spring Boot,Spring Cloud,Netflix Zuul,我有一个springcloud应用程序,带有Gateway微服务,由Zuul供电Gateway主要职责是使用Spring-Security和JWT对用户进行身份验证和授权。 现在,在网关后面的其他微服务中,我想获得当前登录的用户。有什么想法吗?我实现了一个类似的体系结构。我是通过下面的方法实现的 步骤1-通过在应用程序属性中配置敏感头,将Zuul配置为将头传递给下游系统 zuul.sensitiveHeaders=Cookie,Set-Cookie 步骤2-在网关中公开一个端点,该端点返回当前
springcloud
应用程序,带有Gateway
微服务,由Zuul
供电Gateway
主要职责是使用Spring-Security
和JWT
对用户进行身份验证和授权。
现在,在
网关
后面的其他微服务中,我想获得当前登录的用户。有什么想法吗?我实现了一个类似的体系结构。我是通过下面的方法实现的
步骤1-通过在应用程序属性中配置敏感头,将Zuul配置为将头传递给下游系统
zuul.sensitiveHeaders=Cookie,Set-Cookie
步骤2-在网关中公开一个端点,该端点返回当前登录的用户详细信息
public UserReturnData fetchUserDetails()
{
UserReturnData userReturnData = new UserReturnData();
List<String> roles = new ArrayList<String>();
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
userReturnData.setUsername(auth.getName());
Long id=uRepo.findId(auth.getName());
userReturnData.setId(id);
Collection<SimpleGrantedAuthority> authorities = (Collection<SimpleGrantedAuthority>) SecurityContextHolder
.getContext().getAuthentication().getAuthorities();
for (SimpleGrantedAuthority authority : authorities) {
roles.add(authority.getAuthority());
}
userReturnData.setRoles(roles);
return userReturnData;
}
这是如果你想保持简单。如果您有更复杂的需求,可以使用zuul过滤器。您可以在请求头中将其作为correlationid和其他文件发送
@Service
public class UserDetailsService
{
@Autowired
WebClient.Builder webClientBuilder;
@Autowired
HttpServletRequest request;
@Value("${common.serverurl}")
private String reqUrl;
public UserReturnData getCurrentUser()
{
UserReturnData userDetails = webClientBuilder.build()
.get()
.uri(reqUrl+"user/me")
.header("Authorization", request.getHeader("Authorization"))
.retrieve()
.bodyToMono(UserReturnData.class)
.block();
return userDetails;
}
}