【发布时间】:2015-11-26 17:44:41
【问题描述】:
正在尝试在 mule 中进行身份验证和授权并使其正常工作。现在我想要对 mule 安全上下文的引用,特别是要在 flow 中使用的 principal 对象引用。如何在流中获取对 mule 中主体对象的引用?
链接到mule xml
【问题讨论】:
标签: mule mule-component anypoint-studio
正在尝试在 mule 中进行身份验证和授权并使其正常工作。现在我想要对 mule 安全上下文的引用,特别是要在 flow 中使用的 principal 对象引用。如何在流中获取对 mule 中主体对象的引用?
链接到mule xml
【问题讨论】:
标签: mule mule-component anypoint-studio
安全上下文可通过 MuleSession 获得,而此会话可通过 eventContext 获得。要获取 eventContext 引用,可以进行以下操作。
这可以通过实现 Callable 来实现。创建以下 java 类。现在在 mule 流中放置一个 java 组件,它必须被调用并使用创建的 java 类进行配置。 Mule 会自动调用以 eventContext 为参数的 onCall 方法,无需额外配置即可调用。
示例 java 组件从 session 中获取安全内容,并从中获取安全主体并将其存储在流变量“user”中,该流变量可以由出现在流中此 java 组件之后的其他流元素使用。
import org.mule.api.MuleEventContext;
import org.mule.api.lifecycle.Callable;
import org.mule.api.security.Authentication;
import org.springframework.security.core.userdetails.UserDetails;
public class GetSecurityPrincipalCallable implements Callable {
@Override
public Object onCall(MuleEventContext eventContext) throws Exception {
Authentication auth = eventContext.getSession().getSecurityContext()
.getAuthentication();
UserDetails principal = (UserDetails) auth.getPrincipal();
System.out.println("username is : " + principal.getUsername());
eventContext.getMessage().setInvocationProperty("user", principal);
return null;
}
}
【讨论】: