在mule中尝试身份验证和授权并使其正常工作。现在我希望引用mule安全性上下文,特别是要在流中使用的 principal 对象引用。如何在流中的mule中获取对主要对象的引用?
链接到mule xml
答案 0 :(得分:2)
安全上下文可通过MuleSession获得,此会话可通过eventContext获得。要获取eventContext引用,可以执行以下操作。
这可以通过实现Callable来实现。创建以下java类。现在将一个java组件放在mule流中,在那里必须调用它,并使用创建的java类进行配置。 Mule自动调用onCall方法,该方法将eventContext作为参数,并且不需要额外的配置来调用。
示例java组件从会话中获取安全内容,并从中获取安全主体并将其存储在流变量" 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;
}
}