MVC单点登录使用小结
来源:互联网 发布:路由器和交换机 知乎 编辑:程序博客网 时间:2024/06/05 15:16
一、客户端
1、在web.config中加入需要登录的公共地址
<add key="PassportCenterUrl" value="http://localhost:8022"/>
2、编写过滤条件
public class AuthAttribute : ActionFilterAttribute { public AuthCodeEnum Code { get; set; } public override void OnActionExecuting(ActionExecutingContext filterContext) { var request = filterContext.HttpContext.Request; var session = filterContext.HttpContext.Session; //如果存在身份信息 if (Common.CurrentUser == null) { if (Code == AuthCodeEnum.Public) { return; } string reqToken = request["Token"]; string ticket = request["Ticket"]; Cache cache = HttpContext.Current.Cache; //每次刷新页面的时候首先删除Token if (string.IsNullOrEmpty(reqToken) || string.IsNullOrEmpty(ticket)) { cache.Remove(ConstantHelper.TOKEN_KEY); } //没有获取到Token或者Token验证不通过或者没有取到从P回调的ticket 都进行再次请求P TokenModel tokenModel = cache.Get(ConstantHelper.TOKEN_KEY) == null ? null : (TokenModel)cache.Get(ConstantHelper.TOKEN_KEY); if (string.IsNullOrEmpty(reqToken) || tokenModel == null || tokenModel.Token != reqToken || string.IsNullOrEmpty(ticket)) { DateTime timestamp = DateTime.Now; string returnUrl = request.Url.AbsoluteUri; tokenModel = new TokenModel { TimeStamp = timestamp, Token = AuthernUtil.CreateToken(timestamp) }; //Token加入缓存中,设计过期时间为20分钟 cache.Add(ConstantHelper.TOKEN_KEY, tokenModel, null, DateTime.Now.AddMinutes(20), Cache.NoSlidingExpiration, CacheItemPriority.Default, null); filterContext.Result = new ContentResult { Content = GetAuthernScript(AuthernUtil.GetAutherUrl(tokenModel.Token, timestamp), returnUrl) }; return; } LoginService service = new LoginService(); var userinfo = service.GetUserInfo(ticket); session[ConstantHelper.USER_SESSION_KEY] = userinfo; //验证通过,cache中去掉Token,保证每个token只能使用一次 cache.Remove(ConstantHelper.TOKEN_KEY); } } private string GetAuthernScript(string authernUrl, string returnUrl) { StringBuilder sbScript = new StringBuilder(); sbScript.Append("<script type='text/javascript'>"); sbScript.AppendFormat("window.location.href='{0}&returnUrl=' + encodeURIComponent('{1}');", authernUrl, returnUrl); sbScript.Append("</script>"); return sbScript.ToString(); } }
3、设定过滤条件
[Auth(Code = AuthCodeEnum.Login)] public ViewResult Login() { ViewBag.id = Common.CurrentUser.UserId; ViewBag.useName = Common.CurrentUser.UserName; return View("Index"); }
下载 地址:http://download.csdn.net/detail/zhgl7688/9839632
0 0
- MVC单点登录使用小结
- 实现单点登录 mvc
- C# 单点登录 MVC
- 工作小结之单点登录
- 单点登录SSO学习小结
- spring mvc实现单点登录
- .net SSO单点登录mvc
- 单点登录使用
- asp.net MVC 中 单点登录
- CAS 单点登录使用详解
- 单点登录cas的使用
- 使用Crowd进行单点登录
- CAS 单点登录使用详解
- 使用WIF实现单点登录
- discuz使用其它单点登录
- 使用php实现单点登录
- 在spring mvc项目中实现登录账号单点登录
- 单点登录(一)使用Cookie+File实现单点登录
- C#Winform程序如何发布并自动升级(图解)
- 关于socket 实现聊天室时客户端导致readline出现阻塞解决办法
- PHP点点滴滴
- Zookeeper系列(六)Zookeeper客户端(JAVA)API之创读取子节点列表
- vector
- MVC单点登录使用小结
- 抽象工厂模式【Abstract Factory Pattern】
- 2017.05.11-2Springboot 页面显示
- SSH Secure File Transfer 新手小贴士
- mysql优化策略
- okhttp的简单使用例子
- 前端开发工具整理
- Python使用urlib添加头部实现https请求 同时使用PyExecJS-1.4.0触发JS
- 直播服务器的搭建以及感想