在.Net MVC结构API接口中推断http头信息实现公共的权限验证过滤器演示样例
2017-07-08 11:29
330 查看
//control action
public class TestController : ApiController { [MyAuthFilter] public string test(string str) { return str.Trim(); } }
//过虑器类 public class MyAuthFilter : ActionFilterAttribute { const string SecurityKeyName = "MySecurityKey";//http头的name public object _EBACLS = new object(); public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext) { if (EBPermission == "1")//推断权限 { if (EBACLS == null) { lock (_EBACLS) { EBACLS = SetEBACLSData(); } } bool isAuth = false; bool isPermission = false; EBSecurityData EBSecurityData = null;//自己定义对象 IEnumerable<string> lists; if (actionContext.Request.Headers.TryGetValues(SecurityKeyName, out lists)) { string securityKey = lists.FirstOrDefault(); LogUtility.WriteLog(SecurityKeyName + securityKey);//写日志文件 try { EBSecurityData = EBSecurityUtility.GetSecurityData(securityKey);//解密得到的加密串 LogUtility.WriteLog("EBSecurityData:" + (EBSecurityData != null ? EBSecurityData.ObjectToJson() : "")); } catch (Exception) { } if (EBSecurityData != null && EBSecurityData.Expire > DateTime.Now && EBSecurityData.ProviderId > 0) { GenericIdentity identity = new GenericIdentity(EBSecurityData.ProviderId.ToString(), "Forms"); GenericPrincipal principal = new GenericPrincipal(identity, new string[] { }); HttpContext.Current.User = principal; isAuth = true; string actionName = actionContext.ActionDescriptor.ActionName.ToLower(); string actionNo; EBACLS.TryGetValue(actionName, out actionNo); if (!string.IsNullOrWhiteSpace(EBSecurityData.Acl) && !string.IsNullOrWhiteSpace(actionNo)) { string acl = string.Format(",{0},", EBSecurityData.Acl); isPermission = acl.Contains("," + actionNo + ","); } } } if (!isAuth) { throw new BusinessException("登录验证失败", 401); } else if (!isPermission) { throw new BusinessException("未授权", 403); } } } public static Dictionary<string, string> EBACLS { get; set; } Dictionary<string, string> SetEBACLSData() { Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("getorderitemoperaterecords", "01"); dic.Add("getorderitemchangedetail", "02"); return dic; } }
http头请求演示样例:
User-Agent: Fiddler
Host: localhost
Content-Length: 478
Content-Type: text/json
MySecurityKey: roxnQNJLa0voulfXMcGugvhKJT1njtDV1Hmu67MbGPIU0UlEVmKXjXkPJ5d7dn1HdD%2BPDM%2Fsa9IJn36NksxQE1MdQ8Mqt1JqhvTTvQfG3zhrSFYgMQVAe3AuYcEN%2F9873lIjXXyuK%2FUQ75vJ3kH3bYIZykRmSvR4fPMbxNVWhVHuhO%2BdVJJQDpLS2Pihy1KbjffkcMNYBZJWdPu%2FLzYCIesaLh%2FDC85IOUi9OOdWzaPMjbvPXoBN7ahN%2Fj%2BkmWNJiYBxPPVO3IU%3D
拿到了 MySecurityKey 的值 ,想怎么处理就怎么处理。我这里仅仅是一样演示样例,有效添加api安全系数。
假设哪个方法非常重要。要使用权限,仅仅要在上面加[MyAuthFilter] 标签,就能实现权限验证,当然,假设不同的方法 。也能够使用不同的过虑器~自己能够随便定义。相关文章推荐
- 在.Net MVC结构API接口中判断http头信息实现公共的权限验证过滤器示例
- 一个流行且实用的JS表单验证提示,演示了怎么自定义错误信息的显示方式,同时通过写FormValid.showError类方法来实现错误显示方式自定义: errMsg 是一个错误消息的数组,这样方便自定
- 微信公共平台验证接口JAVA实现
- 过滤器实现登陆权限验证--(简析)
- 支付宝即时到帐接口的python实现,演示样例採用django框架
- 绑定新浪微博API 实现验证 登录 返回接口获取信息
- PHP实现微信JsApi接口--权限验证配置参数的获取
- NET 实现自定义ContextUser的Identity和Principal实现自定义用户信息,权限验证
- C#实现接口IHttpModule完成统一的权限验证
- Jeeplus框架SSM+shiro权限控制中实现跳过登录验证访问接口数据
- Java web实现登录验证和过滤器权限设置
- .NET 实现自定义ContextUser的Identity和Principal实现自定义用户信息,权限验证。
- 通过自定义注解或拦截器实现APP调用后接口全局权限验证
- Java线程演示样例 - 继承Thread类和实现Runnable接口
- .NET 实现自定义ContextUser的Identity和Principal实现自定义用户信息,权限验证
- .NET 实现自定义ContextUser的Identity和Principal实现自定义用户信息,权限验证。
- .NET 实现自定义ContextUser的Identity和Principal实现自定义用户信息,权限验证。
- ASP.NET WEBAPI实现微信JS-SDK接口注入权限验证配置
- 实现IHttpHandler接口来控制文件下载权限
- ASP.NET MVC Preview 5 演示Demo #7 实现JQuery表单数据验证及JQuery操作Html元素