我使用Spring安全來保護對服務器上休息服務的訪問。應用程序使用Camel框架來處理請求/消息。所以當請求通過Spring安全性時,然後駱駝將它轉換爲Exchange類(我使用的是CXFRS組件),並由駱駝處理器進行進一步處理。處理交換的方式應該取決於用戶角色,但是:如何在駱駝處理器中獲取用戶角色? (Spring安全+ REST服務+駱駝)
如何從交換機中引出用戶?
我使用Spring安全來保護對服務器上休息服務的訪問。應用程序使用Camel框架來處理請求/消息。所以當請求通過Spring安全性時,然後駱駝將它轉換爲Exchange類(我使用的是CXFRS組件),並由駱駝處理器進行進一步處理。處理交換的方式應該取決於用戶角色,但是:如何在駱駝處理器中獲取用戶角色? (Spring安全+ REST服務+駱駝)
如何從交換機中引出用戶?
您需要提供有關駱駝如何將請求轉換爲交換類的更多詳細信息。說你的請求進來作爲MyRequest類,你應該能夠做這樣的事情:
MyRequest incoming= (MyRequest)exchange.getIn().getBody();
incoming.getUser();
我不確定這個映射是如何工作的 - 我使用CXFRS組件。 – M314
據我所知,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
中獲取它。
REST服務和Spring安全配置是駱駝路由的一部分還是外部的? – Ralf