AuthorizationFilter.cs 2.6 KB

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