gpt4 book ai didi

java - 如何获取 Camel 处理器中的用户角色? (Spring Security + REST 服务 + Camel)

转载 作者:太空宇宙 更新时间:2023-11-04 07:12:06 26 4
gpt4 key购买 nike

我使用 Spring security 来保护对服务器上的其余服务的访问。应用程序使用Camel框架来处理请求/消息。因此,当请求通过 Spring Security 时,Camel 将其转换为 Exchange 类(我使用 CXFRS 组件),并由 Camel 处理器准备进一步的处理。处理交换的方式应该取决于用户角色,但是:

如何将用户从交易所引出?

最佳答案

据我所知,CXF Camel 组件将身份验证对象存储在名为 Exchange.AUTHENTICATION 的 header 中。查看Camel-Spring Security integration了解更多详情。

如果您需要更多原始访问权限,请检查 this link 。它解释了如何获取当前的 HttpServletRequest 对象。从那里,您应该可以访问 session ,从而访问 SecurityContext。像这样的东西:

Message cxfMessage = exchange.getIn().getHeader(CxfConstants.CAMEL_CXF_MESSAGE, Message.class); 
HttpServletRequest request = (HttpServletRequest)cxfMessage.get("HTTP.REQUEST");
User currentUser = getCurrentUser(request);

public static User getCurrentUser(HttpServletRequest request) {
HttpSession session = request.getSession(false);
if(session != null) {
SecurityContext securityContext = (SecurityContext) session.getAttribute((HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY));
if(securityContext != null && securityContext.getAuthentication() != null && securityContext.getAuthentication().getPrincipal() != null &&
securityContext.getAuthentication().getPrincipal() instanceof User) {
return (User)securityContext.getAuthentication().getPrincipal();
}
}
return null;
}

您甚至可以直接从 HttpSessionSecurityContextRepository 获取它。

关于java - 如何获取 Camel 处理器中的用户角色? (Spring Security + REST 服务 + Camel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20497439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com