MVC扩展Filter, 通过继承AuthorizationAttribute限制IP
2023-09-11 14:16:52 时间
为什么需要AuthorizationAttribute
在没有Authorization系统属性之前,我们可能这样判断:
Request.IsAuthenticated && User.Identity.IsAuthenticated来判断请求是否有权限。
有了Authorization系统属性之后,我们可能这样:
[Authorize]
public ActionResult SomeAction()
在Web.config文件中:
<authentication mode="Forms">
<forms loginUrl="~/Home/UnAuthorized" timeout="2880" />
</authentication>
很显然,有了AuthorizeAttribute这种cross-cutting设计,简化了代码,降低了耦合。
通过继承AuthorizationAttribute来扩展
主要是重写AuthorizeCore方法。
public class SomeAuthorizationAttribute : AuthorizeAttribute
{
private List<string> blockIps;
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
LoadBockIpAddresses();
return (!blockIps.Contains(httpContext.Request.UserHostAddress));
}
public void LoadBlockIpAddresses()
{
blokedIps = new List<string>();
blockedIps.Add("127.0.0.1");
}
}
使用默认的AuthorizeAttribute
[Authorize(Users="", Roles="")]
public ActionResult SomeAction
同时需要在Web.config中配置:
<authentication mode="Forms">
<forms loginUrl="~/Home/UnAuthorized" timeout="2880">
<credentials>
<user name="name" password="name"/>
</credentials>
</forms>
</authentication>
<roleManager enabled="true" cacheRolesInCookie="true" />
相关文章
- 同步FIFO的两种Verilog设计方法(计数器法、高位扩展法)
- 清除页面广告?身为前端,自己做一款简易的chrome扩展吧
- 【EKF定位】基于传感器信息融合的EKF扩展卡尔曼滤波定位算法matlab仿真
- 关于泛型类和扩展方法的一点思考
- lsattr - 显示文件在Linux第二扩展文件系统上的特有属性
- swift的特性:扩展、协议、泛型
- 三、Signalr WebApi客服-客户链接+Redis(集群扩展)
- 【面试题】封装jQuery源码以及实现jQuery的扩展功能
- 思科将移动安全扩展到5G
- WinDbg 命令三部曲:(三)WinDbg SOSEX 扩展命令手册
- Chrome浏览器扩展开发系列之六:options 页面