Java 如何在camel processor中获取用户角色?(春季安全和休息服务)
我使用Spring安全性来保护对服务器上rest服务的访问。应用程序使用Camel框架来处理请求/消息。所以,当请求通过spring安全性时,camel将其转换为Exchange类(我使用CXFRS组件来实现),camel处理器将准备进一步的处理。处理交换的方式应取决于用户角色,但: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
如何将用户从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安全配置是您的驼峰路线的一部分还是外部的?