需求:登录信息验证,需要忽略登录注册这些接口的验证,通过给方法加忽略过滤器实现

1.需要忽略的方法加[IgnoreLoginFilter]

2.定义忽略过滤器

public class IgnoreLoginFilterAttribute :Attribute
{ }

3.Global.asax注册全局过滤器

public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}

4.过滤器配置注册过滤器

public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new UserAuthorizationFilter());
}
}

5.通过过滤器个数来判断是否需要验证登录信息(这个效果不太好,应该判断是否有忽略验证登录信息过滤器)

public class UserAuthorizationFilter : IAuthorizationFilter
{
private static readonly string SID = "SID";
private static readonly string UID = "UID"; public void OnAuthorization(AuthorizationContext filterContext)
{
var action = filterContext.ActionDescriptor.ActionName;
var attributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(IgnoreLoginFilterAttribute),false);
if (attributes.Length == )
{
HttpCookie cookie = filterContext.HttpContext.Request.Cookies.Get(SID);
var cookieSID = filterContext.HttpContext.Request.Cookies[SID];
var cookieUID = filterContext.HttpContext.Request.Cookies[UID];
if (cookieSID != null && cookieUID != null)
{
var sessionEnabel = checkSession(cookieSID.Value, cookieUID.Value); if (!sessionEnabel)
{
filterContext.Result = new JsonResult()
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new ResultInfo(, "登录超时")
};
}
}
else
{
filterContext.Result = new JsonResult()
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new ResultInfo(, "登录超时")
};
}
}
} private static bool checkSession(string sid, string uid)
{
//服务名:ZJCX.ZJCD.APP.Session.Service
var resourceUri = string.Format("Session/CheckSessionStatus?sessionID={0}&zjID={1}", sid, uid);
var result = ZJCX.WebAPI.Connect.WebAPIConnector.Default.Get("ZJCX.ZJCD.APP.Session.Service", resourceUri).Content.ReadAsStringAsync().Result;
var resultObj = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(result, new { code = }); //apiResponse = webApiConnector.Get(serviceName, resourceUri, requestServiceModel2);
return resultObj.code == ;
}
}

6.方法加过滤器

/// <summary>
/// 登录接口
/// </summary>
/// <param name="mobile"></param>
/// <param name="code"></param>
/// <returns></returns>
[HttpPost]
[IgnoreLoginFilter]
public ActionResult Login(string mobile, string code)
{
//登录业务代码...
}

最新文章

  1. 使用 PowerShell 自动化 CloudServices 发布
  2. Ubuntu下更改网卡名称
  3. UVa1636 Headshot
  4. F7控件
  5. 《30天自制操作系统》05_day_学习笔记
  6. NovaMind使用教程
  7. 事务——sql server中的事务应用举例
  8. static final的理解
  9. 转换framebuffer实现安卓截图
  10. Git---Git及GitHub使用笔记
  11. C#整理
  12. JS限制 获取动太ID,播放视频
  13. CRM权限管理
  14. PHP获取项目所有控制器方法名称
  15. 2018-01-15 Antlr4: 修改语法规则更接近普通BNF格式
  16. less 前端css利器 工程化、逻辑化 css 文件
  17. 04C++const增强、枚举的增强
  18. 忙里偷闲写的小例子---读取android根目录下的文件或文件夹
  19. 让 Oracle 11g 32位运作在64位 Windows 上
  20. WebForm——浏览器兼容、旋转、缩放、倾斜、移动

热门文章

  1. 线段树及Lazy-Tag
  2. Ruby面向对象
  3. PAT基础6-12
  4. Linux命令第四篇
  5. .net 多态
  6. webloigc 控制台修改登录密码
  7. javacript onclick事件中传递对象参数
  8. pip安装pycrypto报错:Microsoft Visual C++ 14.0 is required. 和 SSLError: HTTPSConnectionPool的解决办法
  9. Android:android studio快捷键大全
  10. AndroidStudio中Handler类的内存溢出风险