AuthorizationFilter.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using System.Text;
  2. using System.Web;
  3. using Common;
  4. using Extensions;
  5. using Infrastructure;
  6. using Infrastructure.Model;
  7. using Microsoft.AspNetCore.Mvc;
  8. using Microsoft.AspNetCore.Mvc.Filters;
  9. using Services;
  10. //本命名空间暂时先不改,改动比较大2023年9月2日
  11. namespace Filters
  12. {
  13. /// <summary>
  14. /// </summary>
  15. public class AuthorizationFilter : IAuthorizationFilter
  16. {
  17. private readonly ISysLoginService SysLoginService;
  18. public AuthorizationFilter(ISysLoginService sysLoginService)
  19. {
  20. this.SysLoginService = sysLoginService;
  21. }
  22. /// <summary>
  23. /// </summary>
  24. /// <param name="context"></param>
  25. public void OnAuthorization(AuthorizationFilterContext context)
  26. {
  27. var request = context.HttpContext.Request;
  28. string content = "";
  29. if(context.HttpContext.Request.Method.ToLower() == "get")
  30. {
  31. content = context.HttpContext.GetQueryString();
  32. content = content.Substring(content.IndexOf("=") + 1);
  33. content = HttpUtility.UrlDecode(content);
  34. content = Decrypt(content);
  35. Dictionary<string, string> dic = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(content);
  36. string queryString = "";
  37. foreach(string key in dic.Keys)
  38. {
  39. queryString += key + "=" + dic[key] + "&";
  40. }
  41. request.QueryString = new QueryString("?" + queryString.TrimEnd('&'));
  42. }
  43. else if(context.HttpContext.Request.Method.ToLower() == "delete")
  44. {
  45. string path = request.Path.Value;
  46. path = path.Substring(0, path.LastIndexOf("/") + 1) + Decrypt(path.Substring(path.LastIndexOf("/") + 1));
  47. }
  48. else
  49. {
  50. content = context.HttpContext.GetBody();
  51. content = Decrypt(content);
  52. //{"username":"admin","password":"000000"}
  53. request.Body = new MemoryStream(Encoding.UTF8.GetBytes(content));
  54. //验证登录接口
  55. if(request.Path.Value.EndsWith("/oauth2/token"))
  56. {
  57. var scope = request.Query["scope"].ToString();
  58. var grantType = request.Query["grant_type"].ToString();
  59. bool checkLogin = SysLoginService.CheckLogin(scope, grantType, context.HttpContext.GetToken().Replace("Basic ", ""));
  60. if(!checkLogin)
  61. {
  62. string msg = $"请求访问失败,无法访问系统资源";
  63. context.Result = new JsonResult(ApiResult.Error(ResultCode.DENY, msg));
  64. }
  65. }
  66. }
  67. }
  68. public string Decrypt(string str)
  69. {
  70. str = str.Trim('"');
  71. str = Encoding.UTF8.GetString(Convert.FromBase64String(str));
  72. return Dbconn.AesDecrypt(str, Base.GlobalConstant.ApiKey, Base.GlobalConstant.ApiIv);
  73. }
  74. }
  75. }