首页 文章

如何在camel处理器中获得用户角色? (Spring安全REST服务Camel)

提问于
浏览
1

我使用Spring安全性来保护对服务器上的休息服务的访问 . 应用程序使用Camel框架来处理请求/消息 . 因此,当请求通过spring安全性时,然后将它转换为Exchange类(我正在使用CXFRS组件),并由camel处理器准备进一步处理 . 处理交换的方式应取决于用户角色,但是:

如何从交换中带出用户?

2 回答

  • 0

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

    如果您需要更多原始访问权限,请检查this link . 它解释了如何获取当前的 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 获取它 .

  • 1

    您需要提供有关camel如何将请求转换为交换类的更多详细信息 . 假设您的请求是作为MyRequest类进行的,您应该可以执行以下操作:
    MyRequest incoming= (MyRequest)exchange.getIn().getBody();
    incoming.getUser();

相关问题