.net mvc结合微软提供的FormsAuthenticationTicket登陆

一、Web.config

  <system.web><compilation debug="true" targetFramework="4.5" /><httpRuntime targetFramework="4.5" /><authentication mode="Forms"><forms loginUrl="/Sign/SignIn" defaultUrl="/Home/Index" /></authentication></system.web>
View Code

二、SignController(主要实现)

    /// <summary>/// 登陆、注销功能/// </summary>public class SignController : Controller{/// <summary>/// 登陆页面/// </summary>/// <returns></returns>
        [AllowAnonymous]public ActionResult SignIn(){var isAuthenticated = System.Web.HttpContext.Current.User.Identity.IsAuthenticated;if (isAuthenticated) //已经验证用户
            {return Redirect(FormsAuthentication.DefaultUrl);}var reUrl = FormsAuthentication.GetRedirectUrl(HttpContext.User.Identity.Name, false);ViewBag.RedirectUrl = reUrl;return View();}/// <summary>/// 登陆功能/// </summary>/// <param name="userName">用户名</param>/// <param name="pwd">密码</param>/// <returns></returns>
        [HttpPost][AllowAnonymous]public JsonResult LogIn(string userName, string pwd){if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(pwd)){var ticket = new FormsAuthenticationTicket(2, userName, DateTime.Now, DateTime.Now.AddMinutes(1), false, userName + pwd);string hashTicket = FormsAuthentication.Encrypt(ticket);var userCookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashTicket);HttpContext.Response.Cookies.Add(userCookie);        //添加cookiesvar identity = new FormsIdentity(ticket);HttpContext.User = new CustomPrincipal(identity);       //获取请求信息,通过自定义标志(重点)return Json(1);}elsereturn Json(0);}/// <summary>/// 注销/// </summary>/// <returns></returns>
        [AllowAnonymous]public ActionResult SignOut(){FormsAuthentication.SignOut();return Redirect(FormsAuthentication.LoginUrl);}}
View Code

model

    /// <summary>/// 定义用户对象的基本功能(自定义)/// </summary>public class CustomPrincipal : IPrincipal{#region 字段private IIdentity _identity;#endregion#region 属性public IIdentity Identity{get { return _identity; }}#endregion#region 构造函数public CustomPrincipal(IIdentity identity){_identity = identity;}#endregion#region 方法public bool IsInRole(string role){throw new NotImplementedException();}#endregion}
View Code

view

@{ViewBag.Title = "SignIn";
}<h2>SignIn</h2>
<a href="@Url.Action("Index", "Home")">主页</a>
<a href="@Url.Action("SignIn", "Sign")"> 登陆</a>
<a href="@Url.Action("SignOut", "Sign")"> 注销</a>
<a href="@Url.Action("Detail", "Home")"> 详细</a>
<h2>name:@HttpContext.Current.User.Identity.Name</h2>
<br />
<div>用户名:<input id="user_name" /></div>
<div>密  码:<input id="user_pwd" /></div>
<div><input id="btnSumbit" type="button" value="提交" /></div>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>$(function () {$('#btnSumbit').click(function () {var data = {userName: $('#user_name').val(),pwd: $('#user_pwd').val()}$.post('@Url.Action("LogIn", "Sign")', data, function (result) {if (result == 1)location.href = '@ViewBag.RedirectUrl';elsealert(result);});})})
</script>
View Code

三、需要权限的控制器(调用方式)

    [Authorize]public class BaseController : Controller{}
View Code
    public class HomeController : BaseController{/// <summary>/// 首页/// </summary>/// <returns></returns>public ActionResult Index(){return View();}public ActionResult Detail(){var cidentity = (FormsIdentity)HttpContext.User.Identity;var data = cidentity.Ticket.UserData;//获取存储的 数据var name = HttpContext.User.Identity.Name;var dd = FormsAuthentication.FormsCookieName;return View();}}
View Code
@{ViewBag.Title = "Index";
}<h2>Index</h2>
<a href="@Url.Action("Index", "Home")">主页</a>
<a href="@Url.Action("SignIn", "Sign")"> 登陆</a>
<a href="@Url.Action("SignOut", "Sign")"> 注销</a>
<a href="@Url.Action("Detail", "Home")"> 详细</a>
<h2>name:@HttpContext.Current.User.Identity.Name</h2>
View Code
@{ViewBag.Title = "Detail";
}<h2>Detail</h2>
<a href="@Url.Action("Index", "Home")">主页</a>
<a href="@Url.Action("SignIn", "Sign")"> 登陆</a>
<a href="@Url.Action("SignOut", "Sign")"> 注销</a>
<a href="@Url.Action("Detail", "Home")"> 详细</a>
<h2>name:@HttpContext.Current.User.Identity.Name</h2>
View Code

 

转载于:https://www.cnblogs.com/liujinwu-11/p/4551647.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vc6.o--fatal error C1010错误的解决

当编译c文件时&#xff0c;出错信息为&#xff1a;fatal error C1010: unexpected end of file while looking for precompiled header directive 解决方案&#xff1a; 1、如果发生错误的文件是由其他的C代码文件添加进入当前工程而引起的&#xff0c;则AltF7进入当前工程的…

具有Java 7中自动资源管理功能的GC

这篇文章简要概述了Java 7中引入的称为自动资源管理或ARM的新功能。 文章探讨了ARM如何减少开发人员为有效释放分配的资源的JVM堆而必须编写的代码。 Java编程语言中编程的最甜蜜之处之一是对象取消分配的自动处理。 在Java世界中&#xff0c;这通常被称为垃圾收集。 基本上&am…

PHP学习笔记(六)

《Wordpress 50个过滤钩子》 1-10 过滤钩子是一类函数&#xff0c;wordpress执行传递和处理数据的过程中&#xff0c;在针对这些数据做出某些动作之前的特定点执行。本质上&#xff0c;就是在wordpress输出之前&#xff0c;将对浏览数据做出反应。 添加过滤钩子&#xff1a; ad…

JS 操作 radio input(cc问卷管理)

1、选中特定的单选按钮 function showDetail(content){$("input[name^radio]").removeAttr("checked");for(var i0;i<content.length;i){$("#radio"(i1)content.substr(i,1)).attr("checked","checked");} }2、手动添加问…

国内外著名黑客杂志

国外黑客杂志&#xff1a; 《phrack》黑客杂志 http://www.phrack.org 《phrack》创刊于80年代&#xff0c;是世界级的顶级黑客杂志&#xff0c;每年只有一期&#xff0c;现已出了65期&#xff0c;国人似乎至今只有三人在上面发表发表文章&#xff0c;三人好像都是绿盟的人&…

团体项目随笔

我们的团体项目不仅在在课堂上讨论了很久&#xff0c;课后也是几经讨论。每个人都有不同的想法我特别想做一个基于Web编写的驴客网&#xff0c;因为基于个人需求&#xff0c;在最终的讨论中被毙掉。 我们组最终的的讨论结果是写个游戏&#xff0c;关于游戏的发展&#xff0c;这…

Apache Lucene拼写检查器的“您是不是要”功能

Google的“您是不是要”功能 在上一篇文章中对Lucene进行了介绍之后 &#xff0c;现在是时候提高它&#xff0c;创建一个更复杂的应用程序了。 您肯定最熟悉Google的“您是不是要”功能&#xff08;其他搜索引擎也支持此功能&#xff09;。 这是一个例子&#xff1a; Lucene …

Android-做个性化的进度条

1.案例效果图 2.准备素材 progress1.png(78*78) progress2.png(78*78) 3.原理 采用一张图片作为ProgressBar的背景图片(一般采用颜色比较浅的)。另一张是进度条的图片(一般采用颜色比较深的图片)。进度在滚动时&#xff1a;进度图片逐步显示&#xff0c;背景图片逐…

汇编小记16/3/27

最后更新2016-03-27 21:05:06 [address]与[bx] [address] 在debug中mov ax,[0] 等价于mov ax,ds:[0] [0]表示内存偏移地址 但是在masm汇编解释器中&#xff0c;mov ax,[0] 等价于mov ax,0 [0]表示常量0 [bx] mov ax,[bx] 表示 bx存放的数据为一个偏移地址&#xff0c;段…

ConcurrentLinkedHashMap v 1.0.1发布

大家好&#xff0c;我们发布了并发LinkedHashMap实现的1.0.1版本。 在最新版本中&#xff0c;已进行了一些较小的修改&#xff0c;以在多个线程遍历映射的元素时提高性能。 最新版本还引入了可插拔驱逐策略。 当然&#xff0c;您可以实现自定义逐出策略&#xff0c;也可以将它…

BOMbing The System

roy g bivFebruary 2011 [Back to index] [Comments (0)] What is a BOM? Why should we care? Great, can we do that? Okay, lets do it! Unicode in files Greets to friendly people (A-Z) What is a BOM? Its not the thing that explodes. Thats a BOMB. Heh. BO…

鸟哥的linux私房菜学习笔记 ---第7章-2

1,文件内容查阅的命令: cat ,tac nl,more, less,head,tail ,od 文件的查阅参数,显示行号如何显示行号 nl 中的所有参数都是关于如何显示行号的 这里面less的功能更多,更灵活 :空格 下一页 pageup上一页 pagedown 下一页 /string 字符串查询 ?string 反向字符串查询 man的命…

HDU - 4497 GCD and LCM

题意&#xff1a;给出三个数的gcd,lcm&#xff0c;求这三个数的全部的可能 思路 &#xff1a;设x,y,z的gcd为d&#xff0c;那么设xd*a&#xff0c;yd*b&#xff0c;zd*c。a&#xff0c;b。c肯定是互质的。那么lcmd*a*b*c,所以我们能够得到a*b*clcm/gcdans,将ans分解因数后&…

Java Lambda语法替代

关于lambda-dev邮件列表的讨论已经开始解决lambdas /函数文字的Java语言语法应该是什么样的问题。 让我们看一个稍微平凡的例子&#xff0c;然后尝试弄清楚问题。 Perl的人有一个很好的例子&#xff0c;说明以某种功能性的方式使用函数引用–他们称其为Schwartzian变换&#xf…

浅析SMC技术

今天让我们来看Win32ASM里面的高级一点的技术——SMC&#xff08;当当当当……&#xff09;&#xff01;&#xff01;&#xff01;SMC是什么意思&#xff1f;它的英文名叫“Self Modifying Code”&#xff0c;顾名思义&#xff0c;就是“代码自修改”&#xff08;&#xff1f;&…

JAVA基础--程序是顺序执行的

class Testa {public static void main(String[] args) {String aa"aaa";String bb"bbb"aa;aa"cccc";System.out.println(bb);} } 输出的是 “bbbaaa class Testa {public static void main(String[] args) {String aa"aaa";String …

Spring MVC拦截器示例

我以为是时候看看Spring的MVC拦截器机制了&#xff0c;这种机制已经存在了很多年&#xff0c;并且是一个非常有用的工具。 Spring Interceptor会按照提示进行操作&#xff1a;在传入的HTTP请求到达您的Spring MVC控制器类之前对其进行拦截&#xff0c;或者相反&#xff0c;在其…

Android 调用系统的分享[完美实现同一时候分享图片和文字]

android 系统的分享功能 private void share(String content, Uri uri){Intent shareIntent new Intent(Intent.ACTION_SEND); if(uri!null){//uri 是图片的地址shareIntent.putExtra(Intent.EXTRA_STREAM, uri);shareIntent.setType("image/*"); //当用户选择短信时…

团队行为守则—如果你们由我来领导

&#xfeff;&#xfeff;如果你是在我领导的团队里&#xff0c;有几个额外的事情我要告诉你。我深信这些行为守则是一个高效团队的润滑剂&#xff0c;我并不只是要求别人这样做&#xff0c;我自己也严格恪守。 只有三样事&#xff1a; 问&#xff1a;如果你对任务不清楚&#…

做短,但做对!

编写简洁&#xff0c;优雅&#xff0c;清晰的代码一直是开发人员的艰巨任务。 您的同事不仅会感谢您&#xff0c;而且您会惊讶地发现&#xff0c;不断期待着重构解决方案以更少的代码完成更多&#xff08;或至少相同&#xff09;的工作是多么令人兴奋。 曾经有人说好的程序员是…