Hi currently i need to execute validation before each service execution exclude 2 of them. I already have (see code) and please help me to optimize in any way my preflow part. Every time when I add route with validation, I should add one more condition into all preflow steps. It is obvious incorrect and I sure exist the better way. And if you will be so kind please have a look on my target endpoints. Is everything OK. Or I need to separate all staff into different proxy endpoints?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ProxyEndpoint name="default"> <Description/> <DefaultFaultRule name="fault-rule"> <Step> <Name>GetFaultData</Name> </Step> <Step> <Condition>(error_code is null)</Condition> <Name>GetFaultDataForAlreadyCreatedExceptions</Name> </Step> <Step> <Name>OnErrorPolicy</Name> </Step> </DefaultFaultRule> <PreFlow name="PreFlow"> <Request> <Step> <Condition>(proxy.pathsuffix MatchesPath "/session/ttl/**") or (proxy.pathsuffix MatchesPath "/session/validate") or (proxy.pathsuffix MatchesPath "/session/renew") or (proxy.pathsuffix MatchesPath "/invoiceInfo/**")</Condition> <Name>GetDetailsFromCache</Name> </Step> <Step> <Condition>(proxy.pathsuffix MatchesPath "/session/ttl/**") or (proxy.pathsuffix MatchesPath "/session/validate") or (proxy.pathsuffix MatchesPath "/session/renew") or (proxy.pathsuffix MatchesPath "/invoiceInfo/**") and (DetailsFromCache is null)</Condition> <Name>ThrowNewEmptyDetailsException</Name> </Step> <Step> <Condition>(proxy.pathsuffix MatchesPath "/session/ttl/**") or (proxy.pathsuffix MatchesPath "/session/validate") or (proxy.pathsuffix MatchesPath "/session/renew") or (proxy.pathsuffix MatchesPath "/invoiceInfo/**")</Condition> <Name>SaveUserToken</Name> </Step> <Step> <Condition>(proxy.pathsuffix MatchesPath "/invoiceInfo/**")</Condition> <Name>SaveRequestBody</Name> </Step> <Step> <Condition>(proxy.pathsuffix MatchesPath "/session/ttl/**") or (proxy.pathsuffix MatchesPath "/session/validate") or (proxy.pathsuffix MatchesPath "/session/renew") or (proxy.pathsuffix MatchesPath "/invoiceInfo/**")</Condition> <Name>PushDataFromCacheToRequestOrResponseBody</Name> </Step> <Step> <Condition>(proxy.pathsuffix MatchesPath "/session/ttl/**") or (proxy.pathsuffix MatchesPath "/session/validate") or (proxy.pathsuffix MatchesPath "/session/renew") or (proxy.pathsuffix MatchesPath "/invoiceInfo/**")</Condition> <Name>ExtractMemwordFromDetails</Name> </Step> <Step> <Condition>(proxy.pathsuffix MatchesPath "/session/ttl/**") or (proxy.pathsuffix MatchesPath "/session/validate") or (proxy.pathsuffix MatchesPath "/session/renew") or (proxy.pathsuffix MatchesPath "/invoiceInfo/**") and (memword IsNot null)</Condition> <Name>ThrowNewMemwordExistException</Name> </Step> </Request> <Response/> </PreFlow> <PostFlow name="PostFlow"> <Request/> <Response> <Step> <Name>Add-CORS</Name> </Step> </Response> </PostFlow> <Flows> <Flow name="create"> <Description/> <Condition>(proxy.pathsuffix MatchesPath "/session/open") and (request.verb = "POST")</Condition> <Request> <Step> <Name>SaveMessageId</Name> </Step> <Step> <Name>GetUsernameFromJSON</Name> </Step> </Request> <Response> <Step> <Name>GetResponseCode</Name> </Step> <Step> <Name>GetUserID</Name> </Step> <Step> <Condition>(response_code equals "memword")</Condition> <Name>GetResponseMemword</Name> </Step> <Step> <Condition>(response_code equals "success")</Condition> <Name>GenerateJSONForSuccess</Name> </Step> <Step> <Condition>(response_code equals "memword")</Condition> <Name>GenerateJSONForMemword</Name> </Step> <Step> <Name>ExtractDetailsFromResponse</Name> </Step> <Step> <Name>ExtractTTLFromResponse</Name> </Step> <Step> <Condition>(response_code equals "success") or (response_code equals "memword")</Condition> <Name>SaveDetailsInCache</Name> </Step> <Step> <Condition>(response_code startsWith "fail")</Condition> <Name>ThrowNewAuthFailException</Name> </Step> </Response> </Flow> <Flow name="hello"> <Description/> <Request/> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/hello") and (request.verb = "GET")</Condition> </Flow> <Flow name="invalidate"> <Description/> <Request> <Step> <Name>GetDetailsFromCache</Name> </Step> <Step> <Name>InvalidateSession</Name> </Step> <Step> <Name>GetDetailsFromCache</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/session/close") and (request.verb = "POST")</Condition> </Flow> <Flow name="validate"> <Description/> <Request/> <Response> <Step> <Condition>(proxy.pathsuffix MatchesPath "/session/ttl/**") or (proxy.pathsuffix MatchesPath "/session/validate") or (proxy.pathsuffix MatchesPath "/session/renew") or (proxy.pathsuffix MatchesPath "/session/invoiceInfo/**")</Condition> <Name>GenerateJSONForValidate</Name> </Step> </Response> <Condition>(proxy.pathsuffix MatchesPath "/session/validate") and (request.verb = "POST")</Condition> </Flow> <Flow name="openMemword"> <Description/> <Request> <Step> <Name>GetDetailsFromCache</Name> </Step> <Step> <Name>SaveMessageId</Name> </Step> <Step> <Name>SaveRequestVariablesForMemwordOpen</Name> </Step> <Step> <Name>PushDataFromCacheToRequestOrResponseBody</Name> </Step> <Step> <Condition>(DetailsFromCache is null)</Condition> <Name>ThrowNewEmptyDetailsException</Name> </Step> <Step> <Name>ExtractOwnerFromJSON</Name> </Step> <Step> <Name>GenerateJSONForServerRequestOpenMemword</Name> </Step> </Request> <Response> <Step> <Name>GetResponseCode</Name> </Step> <Step> <Name>PushDataFromCacheToRequestOrResponseBody</Name> </Step> <Step> <Condition>(response_code NotEquals "success")</Condition> <Name>ThrowNewDifferentMemwordException</Name> </Step> <Step> <Name>ExtractOwnerFromJSON</Name> </Step> <Step> <Name>ExtractTTLFromJSON</Name> </Step> <Step> <Name>GenerateJSONForMemwordOpen</Name> </Step> <Step> <Name>ExtractTTLFromResponse</Name> </Step> <Step> <Name>ExtractDetailsFromResponse</Name> </Step> <Step> <Name>SaveDetailsInCache</Name> </Step> </Response> <Condition>(proxy.pathsuffix MatchesPath "/session/open/memword") and (request.verb = "POST")</Condition> </Flow> <Flow name="ttl"> <Description/> <Request> <Step> <Name>GetDetailsFromCache</Name> </Step> <Step> <Name>PushDataFromCacheToRequestOrResponseBody</Name> </Step> <Step> <Name>ExtractOwnerFromJSON</Name> </Step> <Step> <Name>InvalidateSession</Name> </Step> <Step> <Name>SaveMessageId</Name> </Step> <Step> <Name>ExtractTTLFromURL</Name> </Step> </Request> <Response> <Step> <Name>GenerateJSONForTTL</Name> </Step> <Step> <Name>ExtractDetailsFromResponse</Name> </Step> <Step> <Name>ExtractTTLFromResponse</Name> </Step> <Step> <Name>SaveDetailsInCache</Name> </Step> </Response> <Condition>(proxy.pathsuffix MatchesPath "/session/ttl/**") and (request.verb = "POST")</Condition> </Flow> <Flow name="renew"> <Description/> <Request> <Step> <Name>GetDetailsFromCache</Name> </Step> <Step> <Name>PushDataFromCacheToRequestOrResponseBody</Name> </Step> <Step> <Name>ExtractOwnerFromJSON</Name> </Step> <Step> <Name>ExtractTTLFromJSON</Name> </Step> <Step> <Name>InvalidateSession</Name> </Step> <Step> <Name>SaveMessageId</Name> </Step> </Request> <Response> <Step> <Name>GenerateJSONForRenew</Name> </Step> <Step> <Name>ExtractDetailsFromResponse</Name> </Step> <Step> <Name>ExtractTTLFromResponse</Name> </Step> <Step> <Name>SaveDetailsInCache</Name> </Step> </Response> <Condition>(proxy.pathsuffix MatchesPath "/session/renew") and (request.verb = "POST")</Condition> </Flow> <Flow name="searchInvoice"> <Description/> <Request> <Step> <Name>GetDetailsFromCache</Name> </Step> <Step> <Name>ExtractOwnerFromJSON</Name> </Step> <Step> <Name>GenerateJSONRequestForInvoice</Name> </Step> <Step> <Name>GetUserIdForInvoice</Name> </Step> <Step> <Condition>(name NotEquals userID)</Condition> <Name>ThrowNewSessionOwnerNotEqualsUserIDException</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/invoiceInfo/search") and (request.verb = "POST")</Condition> </Flow> <Flow name="countInvoice"> <Description/> <Request> <Step> <Name>GetDetailsFromCache</Name> </Step> <Step> <Name>ExtractOwnerFromJSON</Name> </Step> <Step> <Name>GenerateJSONRequestForInvoice</Name> </Step> <Step> <Name>GetUserIdForInvoice</Name> </Step> <Step> <Condition>(name NotEquals userID)</Condition> <Name>ThrowNewSessionOwnerNotEqualsUserIDException</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/invoiceInfo/counts") and (request.verb = "POST")</Condition> </Flow> </Flows> <HTTPProxyConnection> <BasePath>/mobilegw</BasePath> <Properties/> <VirtualHost>default</VirtualHost> <VirtualHost>secure</VirtualHost> </HTTPProxyConnection> <RouteRule name="validateCredentials"> <Condition>(proxy.pathsuffix MatchesPath "/session/open") and (request.verb = "POST")</Condition> <TargetEndpoint>opensession</TargetEndpoint> </RouteRule> <RouteRule name="validateMemword"> <Condition>(proxy.pathsuffix MatchesPath "/session/open/memword") and (request.verb = "POST")</Condition> <TargetEndpoint>openmemword</TargetEndpoint> </RouteRule> <RouteRule name="service-user"> <Condition>(proxy.pathsuffix MatchesPath "/hello") or (proxy.pathsuffix MatchesPath "**/invoiceInfo/**")</Condition> <TargetEndpoint>service-user</TargetEndpoint> </RouteRule> <RouteRule name="noroute"/> </ProxyEndpoint>
User | Count |
---|---|
1 | |
1 | |
1 | |
1 | |
1 |