我们的项目本来是用azure的auth认证,是用过程中发现登录速度太慢了,所以还是自己搞一个吧,没想到搞起来挺简单的,不是用一个专门的认证服务器哈,就是一个简单的工具类。
/// <summary> /// 认证类继承 /// </summary> public class requestauthorizeattribute : authorizeattribute { public override void onauthorization(httpactioncontext actioncontext) { // 是否不需要验证 或者 已经登录 if (skipauthorization(actioncontext) || islogin(actioncontext)) return; actioncontext.response = getresponse(); } /// <summary> /// 返回信息接口 /// </summary> private httpresponsemessage getresponse() { var response = serviceresponse<bool>.warningresponse(401, commonconst.msg_nologin, false); return jsonhelper.tohttpresponsemessage(response); } /// <summary> /// 判断是否匿名使用接口 /// </summary> private static bool skipauthorization(httpactioncontext actioncontext) { if (!actioncontext.actiondescriptor.getcustomattributes<allowanonymousattribute>().any<allowanonymousattribute>()) return actioncontext.controllercontext.controllerdescriptor.getcustomattributes<allowanonymousattribute>().any<allowanonymousattribute>(); return true; } /// <summary> /// 是否已经登录 /// </summary> private bool islogin(httpactioncontext actioncontext) { var authorization = guid.empty.tostring(); // md5值 if (actioncontext.request.headers.authorization != null) { authorization = actioncontext.request.headers.authorization.tostring(); } var user = operatorprovider.provider.getcurrent(authorization); return user != null; } }
[requestauthorize] public class baseapicontroller : apicontroller { /// <summary> /// 当前用户信息实体 /// </summary> public operatormodel currentusermodel { get { var values = httpcontext.current.request.headers.getvalues("authorization"); var authorization=guid.empty.tostring(); if (values != null && values.length > 0) authorization = values[0]; var currentusermodel = operatorprovider.provider.getcurrent(authorization); if (currentusermodel == null) { currentusermodel = new operatormodel { loginname = "admin" }; } return currentusermodel; } } }
如对本文有疑问, 点击进行留言回复!!
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
C#实现获取本地内网(局域网)和外网(公网)IP地址的方法分析
网友评论