Java 如何在camel processor中获取用户角色?(春季安全和休息服务)

Java 如何在camel processor中获取用户角色?(春季安全和休息服务),java,spring,spring-security,apache-camel,restful-authentication,Java,Spring,Spring Security,Apache Camel,Restful Authentication,我使用Spring安全性来保护对服务器上rest服务的访问。应用程序使用Camel框架来处理请求/消息。所以,当请求通过spring安全性时,camel将其转换为Exchange类(我使用CXFRS组件来实现),camel处理器将准备进一步的处理。处理交换的方式应取决于用户角色,但: 如何将用户从exchange中带出 您需要提供有关camel如何将请求转换为exchange类的更多详细信息。假设您的请求以MyRequest类的形式出现,您应该能够执行以下操作: MyRequest incomi

我使用Spring安全性来保护对服务器上rest服务的访问。应用程序使用Camel框架来处理请求/消息。所以,当请求通过spring安全性时,camel将其转换为Exchange类(我使用CXFRS组件来实现),camel处理器将准备进一步的处理。处理交换的方式应取决于用户角色,但:


如何将用户从exchange中带出

您需要提供有关camel如何将请求转换为exchange类的更多详细信息。假设您的请求以MyRequest类的形式出现,您应该能够执行以下操作:
MyRequest incoming=(MyRequest)exchange.getIn().getBody()

incoming.getUser()

您需要提供有关camel如何将请求转换为exchange类的更多详细信息。假设您的请求以MyRequest类的形式出现,您应该能够执行以下操作:
MyRequest incoming=(MyRequest)exchange.getIn().getBody()

incoming.getUser()

据我所知,CXF Camel组件将身份验证对象存储在名为
Exchange.authentication
的头中。调查更多细节

如果需要更多原始访问,请检查。它解释了如何获取当前的
HttpServletRequest
对象。从那里,您应该可以访问会话,从而访问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

获取它。据我所知,CXF Camel组件将身份验证对象存储在名为
Exchange.authentication
的头中。调查更多细节

如果需要更多原始访问,请检查。它解释了如何获取当前的
HttpServletRequest
对象。从那里,您应该可以访问会话,从而访问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;
}

您甚至可以直接从http://code>HttpSessionSecurityContextRepository

获取它。我不确定这个映射是如何工作的-我使用CXFRS组件实现它。我不确定这个映射是如何工作的-我使用CXFRS组件实现它。REST服务和Spring安全配置是骆驼路线的一部分还是骆驼路线的外部配置REST服务和Spring安全配置是您的驼峰路线的一部分还是外部的?