<bdo id="4g88a"><xmp id="4g88a">
  • <legend id="4g88a"><code id="4g88a"></code></legend>
    權限管理、用戶權限系統、開源用戶權限系統、信息化建設標準基礎數據管理平臺
    代碼改變世界

    C#.NET 大型企業信息化系統集成快速開發平臺 4.2 版本 - 外部服務調用、內部服務調用優化,面向服務化的

    2015-12-25 17:22  通用C#系統架構  閱讀(5010)  評論(1編輯  收藏  舉報

     

    現在的信息系統越來越復雜,越來越龐大,不僅需要內部是一個整體,而且還需要提供很多對外的服務調用。

    1:別人如何調用最方便?用不同的開發語言調用、例如app、手持設備、服務器。
    2:服務的返回狀態是什么樣子的?有利于排查問題。
    3:服務的安全性、可過渡升級性、性能效率要有保障。
    4:服務也需要有完整的調用日志記錄等。

    下面是一個服務調用有效性判斷的函數代碼,供大家參考。

      1 //-----------------------------------------------------------------
      2 // All Rights Reserved , Copyright (C) 2015 , Hairihan TECH, Ltd. 
      3 //-----------------------------------------------------------------
      4 
      5 using System;
      6 using System.Collections.Generic;
      7 using System.Data;
      8 using ServiceStack.Redis;
      9 
     10 namespace DotNet.Business
     11 {
     12     using DotNet.Model;
     13     using DotNet.Utilities;
     14 
     15     /// <summary>
     16     /// BaseServiceSettingManager
     17     /// 服務管理
     18     /// 
     19     /// 修改紀錄
     20     /// 
     21     ///        2015.12.25 版本:1.0 JiRiGaLa    主鍵整理。
     22     /// 
     23     /// <author>
     24     ///        <name>JiRiGaLa</name>
     25     ///        <date>2015.12.25</date>
     26     /// </author> 
     27     /// </summary>
     28     public partial class BaseServiceSettingManager : BaseManager
     29     {
     30         /// <summary>
     31         /// 檢查一個服務調用是否是允許調用的?
     32         /// 1:是否要記錄日志?
     33         /// 2:是否需要埋點?檢查性能?訪問頻率等?調用次數?
     34         /// 3:非合法的調用?是否日志記錄?
     35         /// 4:異常的要進行處理?
     36         /// </summary>
     37         /// <param name="appKey">應用唯一標識</param>
     38         /// <param name="appSecret">應用的簽名密鑰</param>
     39         /// <param name="callLimit">是否進行限制</param>
     40         /// <param name="systemCode">訪問子系統</param>
     41         /// <param name="permissionCode">判斷的權限編號</param>
     42         /// <returns>驗證情況</returns>
     43         public static BaseResult CheckService(string appKey, string appSecret, bool callLimit = false, string systemCode = "Base", string permissionCode = null)
     44         {
     45             BaseResult result = new DotNet.Utilities.BaseResult();
     46             result.Status = false;
     47 
     48             // AppKey: 23286115
     49             // AppSecret: c8d1f06f599d7370467993c72a34c701
     50             // permissionCode: "User.Add" 
     51 
     52             string ipAddress = Utilities.GetIPAddress(true);
     53 
     54             // 1: 判斷參數是否合理?目標服務,總不可以為空,否則怎么區別誰在調用這個服務了?
     55             if (string.IsNullOrEmpty(appKey))
     56             {
     57                 result.StatusCode = "AccessDeny";
     58                 result.StatusMessage = "appKey為空、訪問被拒絕";
     59                 return result;
     60             }
     61 
     62             // 2: 判斷是否在接口角色里, 只有在接口角色里的,才可以進行遠程調用,這樣也方便把接口隨時踢出來。
     63             string roleCode = "Interface";
     64             if (!BaseUserManager.IsInRoleByCache(systemCode, appKey, roleCode))
     65             {
     66                 result.StatusCode = "AccessDeny";
     67                 result.StatusMessage = "非接口用戶、訪問被拒絕";
     68                 return result;
     69             }
     70 
     71             // 3: 判斷調用的頻率是否?這里需要高速判斷,不能總走數據庫?調用的效率要高,不能被遠程接口給拖死了、自己的服務都不正常了。
     72             if (callLimit && PooledRedisHelper.CallLimit(appKey, 10, 10000))
     73             {
     74                 result.StatusCode = "AccessDeny";
     75                 result.StatusMessage = "訪問頻率過高、訪問被拒絕";
     76                 return result;
     77             }
     78 
     79             // 4: 判斷簽名是否有效?是否過期?可以支持多個簽名,容易升級、容易兼容、容易有個過度的緩沖期。為了提高安全性,必須要有簽名才對。
     80             if (!BaseServiceSettingManager.CheckServiceByCache(appKey, appSecret))
     81             {
     82                 result.StatusCode = "AccessDeny";
     83                 result.StatusMessage = "不合法簽名、訪問被拒絕";
     84                 return result;
     85             }
     86 
     87             // 5: 判斷對方的ip是否合法的?1個服務程序,可以有多個ip??梢园逊债斠粋€用戶看待,一個目標用戶可能也配置了多個服務,一般是遠程連接。
     88             BaseUserLogOnManager userLogOnManager = new BaseUserLogOnManager();
     89             BaseUserLogOnEntity userLogOnEntity = userLogOnManager.GetObject(appKey);
     90             if (BaseUserManager.CheckIPAddressByCache(userLogOnEntity, ipAddress, true))
     91             {
     92                 result.StatusCode = "AccessDeny";
     93                 result.StatusMessage = "不合法IP、訪問被拒絕";
     94                 return result;
     95             }
     96 
     97             // 6: 判斷是否有權限?防止被過渡調用,拖死數據庫,可以用緩存的方式進行判斷,這樣不容易被客戶端、合作伙伴拖垮。
     98             if (!string.IsNullOrEmpty(permissionCode) && !BasePermissionManager.IsAuthorizedByCache(systemCode, appKey, permissionCode))
     99             {
    100                 result.StatusCode = "AccessDeny";
    101                 result.StatusMessage = "無權限 " + permissionCode + "、訪問被拒絕";
    102                 return result;
    103             }
    104 
    105             // 7: 判斷是否有效?判斷時間是否對?
    106             BaseUserManager userManager = new BaseUserManager();
    107             BaseUserEntity userEntity = userManager.GetObject(appKey);
    108             UserLogOnResult userLogOnResult = userManager.CheckUser(userEntity, userLogOnEntity);
    109             if (!string.IsNullOrEmpty(userLogOnResult.StatusCode))
    110             {
    111                 BaseLoginLogManager.AddLog(systemCode, userEntity, ipAddress, string.Empty, string.Empty, userLogOnResult.StatusMessage);
    112                 result.StatusCode = userLogOnResult.StatusCode;
    113                 result.StatusMessage = userLogOnResult.StatusMessage;
    114                 return result;
    115             }
    116 
    117             // 8:目前需要判斷的,都加上了。
    118             result.Status = true;
    119             return result;
    120         }
    121     }
    122 }

     

    有經得起考驗的,穩定的系統代碼,干啥都會更順利一些,更快一些,開展工作也會更順一些。遇到的挫折也會少一些。



    C# ASP.NET 通用權限設計、通用權限管理、通用權限組件、單點登錄、集中式權限管理、統一授權體系、分級管理分級授權


    微信掃一掃加好友



    免费视频精品一区二区_日韩一区二区三区精品_aaa在线观看免费完整版_世界一级真人片
    <bdo id="4g88a"><xmp id="4g88a">
  • <legend id="4g88a"><code id="4g88a"></code></legend>