1

我使用Spring安全來保護對服務器上休息服務的訪問。應用程序使用Camel框架來處理請求/消息。所以當請求通過Spring安全性時,然後駱駝將它轉換爲Exchange類(我使用的是CXFRS組件),並由駱駝處理器進行進一步處理。處理交換的方式應該取決於用戶角色,但是:如何在駱駝處理器中獲取用戶角色? (Spring安全+ REST服務+駱駝)

如何從交換機中引出用戶?

+0

REST服務和Spring安全配置是駱駝路由的一部分還是外部的? – Ralf

回答

0

您需要提供有關駱駝如何將請求轉換爲交換類的更多詳細信息。說你的請求進來作爲MyRequest類,你應該能夠做這樣的事情:
MyRequest incoming= (MyRequest)exchange.getIn().getBody();
incoming.getUser();

+0

我不確定這個映射是如何工作的 - 我使用CXFRS組件。 – M314

1

據我所知,CXF駱駝組件存儲在一個叫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中獲取它。