优秀的手机网站案例,一鸣东莞网站建设公司,临沂百度代理公司有几个,一级站点和二级站点区别开源博客项目Blog中提供了另一种访问控制方式#xff0c;其基于自定义类及函数的特性类控制访问权限。本文学习并测试开源博客项目Blog的访问控制方式#xff0c;测试程序中直接复用开源博客项目Blog中的相关类及接口定义#xff0c;并在其上调整判断逻辑。 首先是接口A… 开源博客项目Blog中提供了另一种访问控制方式其基于自定义类及函数的特性类控制访问权限。本文学习并测试开源博客项目Blog的访问控制方式测试程序中直接复用开源博客项目Blog中的相关类及接口定义并在其上调整判断逻辑。 首先是接口AllowAccessAttribute用于标识函数是否需要访问控制。
[AttributeUsage(AttributeTargets.Method)]
public class AllowAccessAttribute : Attribute
{}然后定义特定类AuthorizationAttribute 用于标识并处理指定控制器类的访问控制在类中实现OnAuthorization函数这里调整了原博客项目Blog的访问控制逻辑Blog项目使用基于Cookie的身份认证其在函数内使用HttpContext.User相关信息进行登录判断函数的输入参数AuthorizationFilterContext中包含有待访问的控制器类及函数信息如下截图所示可以据此做更详细的访问控制。
public class AuthorizationAttribute : Attribute, IAuthorizationFilter
{public void OnAuthorization(AuthorizationFilterContext context){bool ignore ((ControllerActionDescriptor)context.ActionDescriptor).MethodInfo.GetCustomAttributes(false).Any(f f is AllowAccessAttribute);if (!ignore){if (!context.HttpContext.Session.IsAvailable ||string.IsNullOrEmpty(context.HttpContext.Session.GetString(user))){context.Result new RedirectToRouteResult(new RouteValueDictionary{{ controller, Account },{ action, Login } });return;}}}
}在测试项目中的使用示例如下所示最终程序的运行效果是访问Home/Privacy可以直接看到页面放在Home/Index的话如果没有登录则跳转到登录页面。
[Authorization]
public class HomeController : Controller
{public IActionResult Index(){ViewData.Add(CurUser, HttpContext.Session.GetString(user));return View();}[AllowAccess]public IActionResult Privacy(){return View();}
}参考文献 [1]https://www.cnblogs.com/boonya/p/18557417 [2]http://www.pzhseo.com/article/dipjeg.html [3]https://cloud.tencent.com/developer/article/1783650 [4]https://blog.csdn.net/ousetuhou/article/details/135392012 [5]https://blog.51cto.com/u_16213593/11106992 [6]https://blog.csdn.net/weixin_30371469/article/details/97157033