/// <summary> /// 得到票据相关的Token容器 /// </summary> /// <returns></returns> public GenericTicketTokenContainer GetGenericTicketTokenContainer() { GenericTicketTokenContainer container = new GenericTicketTokenContainer(); container.CopyFrom(this.Identity as DeluxeIdentity); return(container); }
public void DeserializeRequest(System.ServiceModel.Channels.Message message, object[] parameters) { object bodyFormatProperty; if (!message.Properties.TryGetValue(WebBodyFormatMessageProperty.Name, out bodyFormatProperty) || (bodyFormatProperty as WebBodyFormatMessageProperty).Format != WebContentFormat.Raw) { throw new InvalidOperationException("服务行为配置错误,请将WebHttpBinding的ContentTypeMapper属性设置为WfRawWebContentTypeMapper类型"); } try { PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("DeserializeRequest", () => { string jsonStr = WcfUtils.GetMessageRawContent(message); Dictionary <string, object> paramsInfo = JSONSerializerExecute.Deserialize <Dictionary <string, object> >(jsonStr); Dictionary <string, object> headers = PopHeaderInfo(paramsInfo); PushHeaderInfoToMessageProperties(message, headers); Dictionary <string, string> connectionMappings = PopConnectionMappings(paramsInfo); PushConnectionMappingsToMessageProperties(message, connectionMappings); Dictionary <string, object> context = PopContextInfo(paramsInfo); PushContextToMessageProperties(message, context); GenericTicketTokenContainer container = PopGenericTicketTokenContainer(paramsInfo); PushGenericTicketTokenContainer(message, container); for (int i = 0; i < _OperationDesc.Messages[0].Body.Parts.Count; i++) { string paramName = _OperationDesc.Messages[0].Body.Parts[i].Name; Type targetType = this._OperationDesc.Messages[0].Body.Parts[i].Type; object val = paramsInfo[paramName]; try { parameters[i] = JSONSerializerExecute.DeserializeObject(val, targetType); } catch (System.Exception ex) { string errorMessage = string.Format("反序列化参数{0}错误,类型为{1}:{2}", paramName, targetType.ToString(), ex.Message); throw new InvalidDataException(errorMessage, ex); } } }); } catch (Exception ex) { throw new InvalidOperationException("传入的JSON格式错误:" + ex.Message, ex); } }
private static void SetPrincipal(GenericTicketTokenContainer container) { IPrincipalBuilder principalBuilder = PrincipalSettings.GetConfig().GetPrincipalBuilder(false); if (principalBuilder != null) { IPrincipal principal = principalBuilder.CreatePrincipal(container, null); PrincipaContextAccessor.SetPrincipal(principal); } }
public static void InitPrincipal(string userKey) { GenericTicketTokenContainer tokenContainer = new GenericTicketTokenContainer(); tokenContainer.User = new GenericTicketToken(Consts.Users[userKey]); tokenContainer.RealUser = new GenericTicketToken(Consts.Users[userKey]); DeluxeIdentity identity = new DeluxeIdentity(tokenContainer, null); DeluxePrincipal principal = new DeluxePrincipal(identity); PrincipaContextAccessor.SetPrincipalInContext(WfClientServiceBrokerContext.Current, principal); }
private GenericTicketTokenContainer PopGenericTicketTokenContainer(Dictionary <string, object> paramsInfo) { GenericTicketTokenContainer container = null; object containerObject = null; if (paramsInfo.TryGetValue("__TokenContainer", out containerObject)) { container = containerObject as GenericTicketTokenContainer; } return(container); }
public void SaveDescriptor() { TenantContext.Current.TenantCode = "Test1"; TenantContext.Current.Enabled = true; GenericTicketTokenContainer tokenContainer = new GenericTicketTokenContainer(); InitPrincipal("Requestor"); WfClientProcessDescriptor processDesp = OperationHelper.PrepareSimpleProcess(); WfClientProcessDescriptor loadedProcessDesp = WfClientProcessDescriptorServiceProxy.Instance.LoadDescriptor(processDesp.Key); processDesp.AssertProcessDescriptor(loadedProcessDesp); }
public object Invoke(object instance, object[] inputs, out object[] outputs) { Message messge = OperationContext.Current.RequestContext.RequestMessage; object mappingObject = null; Dictionary <string, string> connectionMappings = null; if (messge.Properties.TryGetValue("ConnectionMappings", out mappingObject) == false) { connectionMappings = new Dictionary <string, string>(); } else { connectionMappings = (Dictionary <string, string>)mappingObject; } InitConnectionMappings(connectionMappings); object contextObject = null; if (messge.Properties.TryGetValue("Context", out contextObject)) { Dictionary <string, object> context = (Dictionary <string, object>)contextObject; if (context.ContainsKey("TenantCode")) { TenantContext.Current.TenantCode = (string)context["TenantCode"]; } if (context.ContainsKey("Culture")) { ExceptionHelper.DoSilentAction(() => Thread.CurrentThread.CurrentCulture = new CultureInfo((string)context["Culture"])); } } object containerObject = null; if (messge.Properties.TryGetValue("TokenContainer", out containerObject)) { GenericTicketTokenContainer container = (GenericTicketTokenContainer)containerObject; //构造Principal,但是吃掉错误 ExceptionHelper.DoSilentAction(() => SetPrincipal(container)); } return(InvokeWithMonitor(instance, inputs, out outputs)); }
/// <summary> /// 从Ticket token构造Identity /// </summary> /// <param name="tokenContainer"></param> /// <param name="ticket"></param> public DeluxeIdentity(GenericTicketTokenContainer tokenContainer, ITicket ticket) { tokenContainer.NullCheck("tokenContainer"); tokenContainer.User.NullCheck("tokenContainer.User"); tokenContainer.RealUser.NullCheck("tokenContainer.RealUser"); OguObjectCollection <IUser> users = GetUsersInfoFromIDs(tokenContainer.User.ID, tokenContainer.RealUser.ID); this.user = users.Find(u => string.Compare(u.ID, tokenContainer.User.ID, true) == 0); this.realUser = users.Find(u => string.Compare(u.ID, tokenContainer.RealUser.ID, true) == 0); this.user.NullCheck("user"); this.realUser.NullCheck("realUser"); this.ticket = ticket; }
/// <summary> /// 创建 <see cref="IPrincipal"/> 对象 /// </summary> /// <param name="tokenContainer">token的容器</param> /// <param name="ticket">票据</param> /// <returns></returns> public IPrincipal CreatePrincipal(GenericTicketTokenContainer tokenContainer, ITicket ticket) { DeluxeIdentity identity = new DeluxeIdentity(tokenContainer, ticket); return(new DeluxePrincipal(identity)); }
private static void PushGenericTicketTokenContainer(System.ServiceModel.Channels.Message message, GenericTicketTokenContainer container) { if (container != null) message.Properties["TokenContainer"] = container; }
private static void PushGenericTicketTokenContainer(System.ServiceModel.Channels.Message message, GenericTicketTokenContainer container) { if (container != null) { message.Properties["TokenContainer"] = container; } }