mirror of
https://gitee.com/dotnetchina/OpenAuth.Net.git
synced 2025-07-15 23:13:40 +08:00
恢复infrastructure
This commit is contained in:
parent
ba897b1d88
commit
a8fd59e247
@ -1,20 +0,0 @@
|
||||
using System.Web;
|
||||
|
||||
namespace Infrastructure.Auth
|
||||
{
|
||||
public class CacheKey
|
||||
{
|
||||
public static string SessionName = "OpenAuth";
|
||||
public static string UserSessionName = "Session_";
|
||||
private static string GetSessionId()
|
||||
{
|
||||
HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(SessionName);
|
||||
string remoteBrowserIp = WebUtility.GetIP();
|
||||
return UserSessionName + remoteBrowserIp + ":" + cookie.Value;
|
||||
}
|
||||
public static string UserID
|
||||
{
|
||||
get { return GetSessionId(); }
|
||||
}
|
||||
}
|
||||
}
|
@ -1,79 +0,0 @@
|
||||
using Infrastructure.Cache;
|
||||
using System;
|
||||
using System.Web;
|
||||
|
||||
namespace Infrastructure.Auth
|
||||
{
|
||||
public class CacheSession
|
||||
{
|
||||
ICache cache = DIContainer.Resolve<ICache>();
|
||||
private HttpContext context;
|
||||
public CacheSession(bool IsReadOnly)
|
||||
{
|
||||
this.IsReadOnly = IsReadOnly;
|
||||
}
|
||||
public CacheSession(HttpContext context, bool IsReadOnly, TimeSpan TimeOut, ICache cacheService)
|
||||
{
|
||||
this.context = context;
|
||||
this.IsReadOnly = IsReadOnly;
|
||||
this.TimeOut = TimeOut;
|
||||
}
|
||||
public CacheSession(HttpContext context, bool IsReadOnly)
|
||||
{
|
||||
this.context = context;
|
||||
this.IsReadOnly = IsReadOnly;
|
||||
GetSessionId();
|
||||
if (CacheKey.UserID != null)
|
||||
{
|
||||
var userInfo = cache.Get<dynamic>(CacheKey.UserID);
|
||||
}
|
||||
}
|
||||
//获取会话是否已经验证通过
|
||||
public bool IsAuthenticated
|
||||
{
|
||||
get
|
||||
{
|
||||
if (cache.Get(SessionId) == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//会话唯一Id
|
||||
public string SessionId
|
||||
{
|
||||
get
|
||||
{
|
||||
return GetSessionId();
|
||||
}
|
||||
}
|
||||
public static string SessionName = CacheKey.SessionName;
|
||||
public static string UserSessionName = CacheKey.UserSessionName;
|
||||
//指示会话是否为只读,true为只读
|
||||
public bool IsReadOnly { get; set; }
|
||||
//超时期限
|
||||
public TimeSpan TimeOut { get; set; }
|
||||
private string GetSessionId()
|
||||
{
|
||||
HttpCookie cookie = context.Request.Cookies.Get(SessionName);
|
||||
string remoteBrowserIp = WebUtility.GetIP();
|
||||
if (cookie == null || string.IsNullOrEmpty(cookie.Value))
|
||||
{
|
||||
string newSessionId = Guid.NewGuid().ToString();
|
||||
HttpCookie newCookie = new HttpCookie(SessionName, newSessionId);
|
||||
newCookie.HttpOnly = IsReadOnly;
|
||||
context.Response.Cookies.Add(newCookie);
|
||||
return UserSessionName + remoteBrowserIp + ":" + newSessionId;
|
||||
}
|
||||
else
|
||||
{
|
||||
return UserSessionName + remoteBrowserIp + ":" + cookie.Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,48 +0,0 @@
|
||||
using Infrastructure.Cache;
|
||||
using System;
|
||||
using System.Web;
|
||||
|
||||
namespace Infrastructure.Auth
|
||||
{
|
||||
/// <summary>
|
||||
/// 身份认证服务实现(缓存可分布式部署)
|
||||
/// </summary>
|
||||
public class FormsAuthenticationService : IAuthenticationService
|
||||
{
|
||||
ICache cacheService;
|
||||
CacheSession cacheSession;
|
||||
HttpContext httpContext = HttpContext.Current;
|
||||
//hpf 缓存相关
|
||||
public FormsAuthenticationService()
|
||||
{
|
||||
cacheService = DIContainer.Resolve<ICache>();
|
||||
cacheSession = new CacheSession(httpContext, true);
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取当前认证的用户
|
||||
/// </summary>
|
||||
/// <returns>当前用户未通过认证则返回null</returns>
|
||||
public dynamic GetAuthenticatedUser()
|
||||
{
|
||||
if (httpContext == null || !cacheSession.IsAuthenticated)
|
||||
{
|
||||
return null;//hpf未登录
|
||||
}
|
||||
return cacheService.Get<dynamic>(cacheSession.SessionId);
|
||||
}
|
||||
|
||||
public void SignIn(string loginName, dynamic userInfo, TimeSpan expiration)
|
||||
{
|
||||
var sessionId = cacheSession.SessionId;
|
||||
cacheService.Set(sessionId, userInfo, expiration);
|
||||
}
|
||||
|
||||
public void SignOut()
|
||||
{
|
||||
if (!string.IsNullOrEmpty(CacheKey.UserID))
|
||||
{
|
||||
cacheService.Remove(CacheKey.UserID);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Infrastructure.Auth
|
||||
{
|
||||
/// <summary>
|
||||
/// 用于身份认证接口
|
||||
/// </summary>
|
||||
public interface IAuthenticationService
|
||||
{
|
||||
/// <summary>
|
||||
/// 登录
|
||||
/// </summary>
|
||||
/// <param name="loginName">登录名</param>
|
||||
/// <param name="userData">与登录名相关的用户信息</param>
|
||||
/// <param name="expiration">登录Cookie的过期时间,单位:分钟。</param>
|
||||
void SignIn(string loginName, dynamic userInfo, TimeSpan expiration);
|
||||
/// <summary>
|
||||
/// 注销
|
||||
/// </summary>
|
||||
void SignOut();
|
||||
/// <summary>
|
||||
/// 获取当前登录的用户
|
||||
/// </summary>
|
||||
/// <returns>当前用户未通过认证则返回null</returns>
|
||||
dynamic GetAuthenticatedUser();
|
||||
}
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
namespace Infrastructure.Auth
|
||||
{
|
||||
/// <summary>
|
||||
/// 当前登录用户相关
|
||||
/// </summary>
|
||||
public class UserContext
|
||||
{
|
||||
public static dynamic CurrentUser
|
||||
{
|
||||
get
|
||||
{
|
||||
IAuthenticationService authenticationService = DIContainer.ResolvePerHttpRequest<IAuthenticationService>();
|
||||
var currentUser = authenticationService.GetAuthenticatedUser();
|
||||
if (currentUser != null)
|
||||
return currentUser;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,75 +0,0 @@
|
||||
using Autofac;
|
||||
using Autofac.Core;
|
||||
using System.Web.Mvc;
|
||||
|
||||
namespace Infrastructure
|
||||
{
|
||||
/// <summary>
|
||||
/// 依赖注入
|
||||
/// </summary>
|
||||
public class DIContainer
|
||||
{
|
||||
private static IContainer iContainer;
|
||||
public static void RegisterContainer(IContainer container)
|
||||
{
|
||||
iContainer = container;
|
||||
}
|
||||
/// <summary>
|
||||
/// 按类型获取组件
|
||||
/// </summary>
|
||||
/// <typeparam name="Tservice"></typeparam>
|
||||
/// <returns></returns>
|
||||
public static Tservice Resolve<Tservice>()
|
||||
{
|
||||
return ResolutionExtensions.Resolve<Tservice>(iContainer);
|
||||
}
|
||||
/// <summary>
|
||||
/// 按参数获取组件
|
||||
/// </summary>
|
||||
/// <typeparam name="Tservice"></typeparam>
|
||||
/// <param name="paramters"></param>
|
||||
/// <returns></returns>
|
||||
public static Tservice Resolve<Tservice>(params Parameter[] parameters)
|
||||
{
|
||||
return ResolutionExtensions.Resolve<Tservice>(iContainer, parameters);
|
||||
}
|
||||
/// <summary>
|
||||
/// 按key获取组件
|
||||
/// </summary>
|
||||
/// <typeparam name="Tservice">组件类型</typeparam>
|
||||
/// <param name="serviceKey">枚举类型的key</param>
|
||||
/// <returns>返回获取的组件</returns>
|
||||
public static Tservice ResolveKeyed<Tservice>(object serviceKey)
|
||||
{
|
||||
return ResolutionExtensions.ResolveKeyed<Tservice>(iContainer, serviceKey);
|
||||
}
|
||||
/// <summary>
|
||||
/// 按名称获取组件
|
||||
/// </summary>
|
||||
/// <typeparam name="Tservice"></typeparam>
|
||||
/// <param name="serviceName"></param>
|
||||
/// <returns></returns>
|
||||
public static Tservice ResolveNamed<Tservice>(string serviceName)
|
||||
{
|
||||
return ResolutionExtensions.ResolveNamed<Tservice>(iContainer, serviceName);
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取InstancePerHttpRequest的组件 mvc
|
||||
/// </summary>
|
||||
/// <typeparam name="Tservice"></typeparam>
|
||||
/// <returns></returns>
|
||||
public static Tservice ResolvePerHttpRequest<Tservice>()
|
||||
{
|
||||
IDependencyResolver current = DependencyResolver.Current;
|
||||
if (current != null)
|
||||
{
|
||||
Tservice service = (Tservice)current.GetService(typeof(Tservice));
|
||||
if (service != null)
|
||||
{
|
||||
return service;
|
||||
}
|
||||
}
|
||||
return ResolutionExtensions.Resolve<Tservice>(iContainer);
|
||||
}
|
||||
}
|
||||
}
|
@ -79,11 +79,6 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Auth\CacheKey.cs" />
|
||||
<Compile Include="Auth\CacheSession.cs" />
|
||||
<Compile Include="Auth\FormsAuthenticationService.cs" />
|
||||
<Compile Include="Auth\IAuthenticationService.cs" />
|
||||
<Compile Include="Auth\UserContext.cs" />
|
||||
<Compile Include="AutoMapperExt.cs" />
|
||||
<Compile Include="Cache\CacheContext.cs" />
|
||||
<Compile Include="Cache\EnyimMemcachedContext.cs" />
|
||||
@ -91,7 +86,6 @@
|
||||
<Compile Include="Cache\RuntimeMemoryCache.cs" />
|
||||
<Compile Include="Cache\SessionContext.cs" />
|
||||
<Compile Include="CookieHelper.cs" />
|
||||
<Compile Include="DIContainer.cs" />
|
||||
<Compile Include="DynamicLinq.cs" />
|
||||
<Compile Include="DynamicQueryable.cs" />
|
||||
<Compile Include="Filter.cs" />
|
||||
@ -100,11 +94,6 @@
|
||||
<Compile Include="JsonConverter.cs" />
|
||||
<Compile Include="JsonHelper.cs" />
|
||||
<Compile Include="LogHelper.cs" />
|
||||
<Compile Include="MVC\AuthenticationAttribute.cs" />
|
||||
<Compile Include="MVC\JsonExceptionAttribute.cs" />
|
||||
<Compile Include="MVC\LogExceptionAttribute.cs" />
|
||||
<Compile Include="MVC\NoFilterAttribute.cs" />
|
||||
<Compile Include="MVC\UiResponse.cs" />
|
||||
<Compile Include="ObjectHelper.cs" />
|
||||
<Compile Include="PredicateBuilder.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
@ -112,7 +101,6 @@
|
||||
<Compile Include="SessionHelper.cs" />
|
||||
<Compile Include="StringExtensions.cs" />
|
||||
<Compile Include="UriUtil.cs" />
|
||||
<Compile Include="WebUtility.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
|
@ -1,12 +0,0 @@
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
|
||||
namespace Infrastructure.MVC
|
||||
{
|
||||
/// <summary>
|
||||
/// 登录验证
|
||||
/// </summary>
|
||||
public class AuthenticationAttribute: AuthorizeAttribute
|
||||
{
|
||||
}
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
using System;
|
||||
using System.Web.Mvc;
|
||||
|
||||
namespace Infrastructure.MVC
|
||||
{
|
||||
/// <summary>
|
||||
/// 加入action级ajax请求发生500内部错误时返回给浏览器json提示
|
||||
/// </summary>
|
||||
[AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
|
||||
public class JsonExceptionAttribute : HandleErrorAttribute
|
||||
{
|
||||
public override void OnException(ExceptionContext filterContext)
|
||||
{
|
||||
if (!filterContext.ExceptionHandled)
|
||||
{
|
||||
//返回异常json
|
||||
filterContext.Result = new JsonResult
|
||||
{
|
||||
Data = new UiResponse { statusCode = "300", message = filterContext.Exception.Message }
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web.Mvc;
|
||||
|
||||
namespace Infrastructure.MVC
|
||||
{
|
||||
/// <summary>
|
||||
/// 加入全局异常处理500内部错误
|
||||
/// </summary>
|
||||
[AttributeUsage(AttributeTargets.Class, Inherited = true, AllowMultiple = false)]
|
||||
public class LogExceptionAttribute : HandleErrorAttribute
|
||||
{
|
||||
public override void OnException(ExceptionContext filterContext)
|
||||
{
|
||||
if (!filterContext.ExceptionHandled)
|
||||
{
|
||||
string controllerName = filterContext.RouteData.Values["controller"].ToString();
|
||||
string actionName = filterContext.RouteData.Values["action"].ToString();
|
||||
string msgTemp = WebUtility.GetIP() + "在执行controller" + controllerName + "的" + actionName + "时产生异常:" + filterContext.Exception.Message;
|
||||
//hpf此处写入异常日志
|
||||
LogHelper.Fatal(msgTemp);
|
||||
}
|
||||
if (filterContext.Result is JsonResult)
|
||||
{
|
||||
filterContext.ExceptionHandled = true;//异常已处理
|
||||
}
|
||||
else
|
||||
{
|
||||
//通过base返回系统默认异常处理上向错误页面跳转
|
||||
base.OnException(filterContext);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace Infrastructure.MVC
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
|
||||
public class NoFilterAttribute : Attribute
|
||||
{
|
||||
public NoFilterAttribute() { }
|
||||
}
|
||||
}
|
@ -1,44 +0,0 @@
|
||||
|
||||
namespace Infrastructure.MVC
|
||||
{
|
||||
/// <summary>
|
||||
/// 前端框架ajax错误返回
|
||||
/// </summary>
|
||||
public class UiResponse
|
||||
{
|
||||
public string statusCode
|
||||
{
|
||||
get; set;
|
||||
|
||||
}
|
||||
|
||||
public string message
|
||||
{
|
||||
get; set;
|
||||
|
||||
}
|
||||
|
||||
public string tabid
|
||||
{
|
||||
get; set;
|
||||
|
||||
}
|
||||
|
||||
public bool closeCurrent
|
||||
{
|
||||
get; set;
|
||||
|
||||
}
|
||||
public string forward { get; set; }
|
||||
public string forwardConfirm { get; set; }
|
||||
public UiResponse()
|
||||
{
|
||||
statusCode = "200";
|
||||
message = "操作成功";
|
||||
tabid = "";
|
||||
closeCurrent = false;
|
||||
forward = "";
|
||||
forwardConfirm = "";
|
||||
}
|
||||
}
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
|
||||
namespace Infrastructure
|
||||
{
|
||||
public static class WebUtility
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取IP地址
|
||||
/// </summary>
|
||||
/// <returns>返回获取的ip地址</returns>
|
||||
public static string GetIP()
|
||||
{
|
||||
return GetIP(HttpContext.Current);
|
||||
}
|
||||
/// <summary>
|
||||
/// 透过代理获取真实IP
|
||||
/// </summary>
|
||||
/// <param name="httpContext">HttpContext</param>
|
||||
/// <returns>返回获取的ip地址</returns>
|
||||
public static string GetIP(HttpContext httpContext)
|
||||
{
|
||||
string userHostAddress = string.Empty;
|
||||
if (httpContext != null)
|
||||
{
|
||||
userHostAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
|
||||
if (string.IsNullOrEmpty(userHostAddress))
|
||||
{
|
||||
userHostAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
|
||||
}
|
||||
if (string.IsNullOrEmpty(userHostAddress))
|
||||
{
|
||||
userHostAddress = HttpContext.Current.Request.UserHostAddress;
|
||||
}
|
||||
}
|
||||
return userHostAddress;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user