示例#1
0
        /// <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);
            }
        }
示例#3
0
        private static void SetPrincipal(GenericTicketTokenContainer container)
        {
            IPrincipalBuilder principalBuilder = PrincipalSettings.GetConfig().GetPrincipalBuilder(false);

            if (principalBuilder != null)
            {
                IPrincipal principal = principalBuilder.CreatePrincipal(container, null);

                PrincipaContextAccessor.SetPrincipal(principal);
            }
        }
示例#4
0
        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);
        }
示例#6
0
        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 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);
        }
示例#8
0
        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));
        }
示例#9
0
        /// <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;
        }
        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);
        }
        /// <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;
     }
 }
        private static void SetPrincipal(GenericTicketTokenContainer container)
        {
            IPrincipalBuilder principalBuilder = PrincipalSettings.GetConfig().GetPrincipalBuilder(false);

            if (principalBuilder != null)
            {
                IPrincipal principal = principalBuilder.CreatePrincipal(container, null);

                PrincipaContextAccessor.SetPrincipal(principal);
            }
        }