MyAuthorizeAttribute.cs 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using Masuit.MyBlogs.Core.Configs;
  2. using Masuit.MyBlogs.Core.Infrastructure.Services.Interface;
  3. using Masuit.MyBlogs.Core.Models.DTO;
  4. using Masuit.MyBlogs.Core.Models.ViewModel;
  5. using Masuit.Tools.Core.Net;
  6. using Masuit.Tools.Security;
  7. using Microsoft.AspNetCore.Authorization;
  8. using Microsoft.AspNetCore.Http;
  9. using Microsoft.AspNetCore.Mvc;
  10. using Microsoft.AspNetCore.Mvc.Filters;
  11. using Microsoft.Extensions.DependencyInjection;
  12. using System;
  13. using System.Linq;
  14. using System.Web;
  15. namespace Masuit.MyBlogs.Core.Extensions
  16. {
  17. /// <summary>
  18. /// 授权验证过滤器
  19. /// </summary>
  20. public class MyAuthorizeAttribute : ActionFilterAttribute
  21. {
  22. /// <summary>在执行操作方法之前由 ASP.NET MVC 框架调用。</summary>
  23. /// <param name="filterContext">筛选器上下文。</param>
  24. public override void OnActionExecuting(ActionExecutingContext filterContext)
  25. {
  26. if (filterContext.Filters.Any(m => m.ToString().Contains(nameof(AllowAnonymousAttribute))))
  27. {
  28. return;
  29. }
  30. #if !DEBUG
  31. UserInfoOutputDto user = filterContext.HttpContext.Session.Get<UserInfoOutputDto>(SessionKey.UserInfo);
  32. if (user != null && user.IsAdmin)
  33. {
  34. return;
  35. }
  36. //先尝试自动登录
  37. if (filterContext.HttpContext.Request.Cookies.Any(x => x.Key == "username" || x.Key == "password"))
  38. {
  39. string name = filterContext.HttpContext.Request.Cookies["username"] ?? "";
  40. string pwd = filterContext.HttpContext.Request.Cookies["password"]?.DesDecrypt(AppConfig.BaiduAK) ?? "";
  41. var userInfo = (Startup.ServiceProvider.GetRequiredService<IUserInfoService>()).Login(name, pwd);
  42. if (userInfo != null)
  43. {
  44. filterContext.HttpContext.Response.Cookies.Append("username", name, new CookieOptions() { Expires = DateTime.Now.AddDays(7) });
  45. filterContext.HttpContext.Response.Cookies.Append("password", filterContext.HttpContext.Request.Cookies["password"], new CookieOptions() { Expires = DateTime.Now.AddDays(7) });
  46. filterContext.HttpContext.Session.Set(SessionKey.UserInfo, userInfo);
  47. }
  48. else
  49. {
  50. if (filterContext.HttpContext.Request.Method.ToLower().Equals("get"))
  51. {
  52. filterContext.Result = new RedirectResult("/passport/login?from=" + HttpUtility.UrlEncode(filterContext.HttpContext.Request.Path.ToString())?.Replace("#", "%23"));
  53. }
  54. else
  55. {
  56. filterContext.Result = new UnauthorizedObjectResult(new { StatusCode = 401, Success = false, IsLogin = false, Message = "未登录系统,请先登录!" });
  57. }
  58. }
  59. }
  60. else
  61. {
  62. if (filterContext.HttpContext.Request.Method.ToLower().Equals("get"))
  63. {
  64. filterContext.Result = new RedirectResult("/passport/login?from=" + HttpUtility.UrlEncode(filterContext.HttpContext.Request.Path.ToString()));
  65. }
  66. else
  67. {
  68. filterContext.Result = new UnauthorizedObjectResult(new { StatusCode = 401, Success = false, IsLogin = false, Message = "未登录系统,请先登录!" });
  69. }
  70. }
  71. #endif
  72. }
  73. }
  74. }