1

나는 Spring 보안을 사용하여 서버의 rest service에 대한 접근을 보호한다. 응용 프로그램은 Camel 프레임 워크를 사용하여 요청/메시지를 처리합니다. 따라서 요청이 봄 보안을 통과하면 낙타가 Exchange 클래스로 변환되고 (나는 CXFRS Component를 사용하고 있습니다), 추가 처리는 낙타 프로세서에 의해 준비됩니다. 처리 교환해야의 방법은 사용자 역할에 따라 다르지만 :낙타 프로세서에서 사용자 역할을 얻는 방법은 무엇입니까? (Spring security + REST Service + Camel)

어떻게 교환에서 사용자를 가져?

+0

REST 서비스와 Spring 보안 구성이 Camel 경로의 일부입니까? 아니면 외부입니까? – Ralf

답변

0

낙타가 교환 수업에 요청을 변형시키는 방법에 대한 자세한 내용을 제공해야합니다. 귀하의 요청이 MyRequest 클래스로 오는 말, 당신은 같은 것을 할 수 있어야한다 :
MyRequest incoming= (MyRequest)exchange.getIn().getBody();
incoming.getUser();

+0

이 매핑이 어떻게 작동하는지 잘 모르겠습니다. CXFRS Component를 사용합니다. – M314

1

지금까지 내가 아는 한, Exchange.AUTHENTICATION라는 헤더 CXF 낙타 구성 요소 저장 인증 객체입니다. 자세한 내용은 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에서 직접 얻을 수 있습니다.