优化EF以及登录验证

1 ,优化ef

using System.Runtime.Remoting.Messaging;//线程缓存 引用

在DAL 中 BaseDAL 中

//1.0 实例化上下文对象
/*缺点在控制器
* 在处理线程中 就会创建相同个数的ef 容器 每一次操作 都必须 savechanges
*/
// BaseDbContext db = new BaseDbContext();

public BaseDbContext db {
get {
//问线程缓存有没有
object obj = CallContext.GetData("BaseDbContext");//key 可以随意写

if (obj == null)
{
obj = new BaseDbContext();
CallContext.SetData("BaseDbContext", obj);//存入线程缓存中
}
return obj as BaseDbContext;
}
}
--------------------------------
2,登录验证 验证码

为了方便 先 自定义 一个 所有控制器类的父类BaseController 并继承Controller

在BaseController 封装统一的ajax 响应的json 方法

并自定义当前数据业务逻辑接口成员

代码如下:

#region 封装统一的ajax响应的json方法
#region 成功
protected ActionResult WriteSuccess(string msg)
{
return Json(new { status = 0, msg = msg },JsonRequestBehavior.AllowGet);
}
protected ActionResult WriteSuccess(string msg, object data)
{
return Json(new { status = 0, msg = msg, datas = data }, JsonRequestBehavior.AllowGet);
}
#endregion
#region 失败
protected ActionResult WriteError(string msg)
{
return Json(new { status = 1, msg = msg }, JsonRequestBehavior.AllowGet);
}
protected ActionResult WriteError(Exception msg)
{
return Json(new { status = 1, msg = msg.Message }, JsonRequestBehavior.AllowGet);
}
#endregion
#endregion
#region 定义当前数据业务逻辑接口成员
protected IsysFunctionBLL funbll;
protected IsysKeyValueBLL keybll;
protected IsysMenusBLL menbll;
protected IsysOrganStructBLL orgbll;
protected IsysPermissListBLL perbll;
protected IsysRoleBLL rolbll;
protected IsysUserInfo_RoleBLL userrolbll;
protected IsysUserInfoBLL userbll;
protected IwfProcessBLL peocebll;
protected IwfRequestFormBLL reqbll;
protected IwfWorkBLL workbll;
protected IwfWorkBranchBLL brabll;
protected IwfWorkNodesBLL nodebll;
#endregion
----------------------------------------------
开始实现登录操作

首先 在 实体层 中 建一个类 LoginUserInfo

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
public class LoginUserInfo
{
[DisplayName("账 号"),Required(ErrorMessage="账号不能为空")]
public string uLoginName { get; set; }
[DisplayName("密 码"), Required(ErrorMessage = "密码不能为空")]
public string uLoginPWD { get; set; }
[DisplayName("验证码"), Required(ErrorMessage = "验证码不能为空")]
public string Vcode { get; set; }
[DisplayName("3天免登录")]
public bool IsRemember { get; set; }
}

在 UI 层中 建一个控制器LoginController

首先 写一个Action 只做显示登录视图作用

/// <summary>
/// 显示登录视图的
/// </summary>
/// <returns></returns>
[HttpGet]
public ActionResult Login()
{
// int i = 0; int j = 1; int e = j / i;
LoginUserInfo model = new LoginUserInfo() { uLoginName = "admin", uLoginPWD = "123456" };
//如何获取浏览器发送过来的cookie
if (Request.Cookies[Keys.IsRemember] != null)
{
model.IsRemember = true;
}

return View(model);
}

Action方法Login 是Get请求 显示强类型视图 类型为前面自定义的类 LoginUserInfo

视图中 用Ajax 异步表单 并使用ligerUI 插件美化

在视图加载中 使用 $.ligerDialog.open()弹窗

open方法中的 属性 target: $("#target1"),//将ajax异步表单建在此div中

<script type ="text/javascript">
$(function () {
$.ligerDialog.open({
target: $("#target1"),//将ajax异步表单建在此div中
width: 450, height: 280, title: "登录CRM管理系统",
buttons: [
{
text: ‘登录‘, onclick: function (item, dialog) {
$("#btlogin").click();
},
cls: ‘l-dialog-btn-highlight‘
},
{
text: ‘重置‘, onclick: function (item, dialog) {
//form0利用js重置表单的值 两种方法都可以
//document.getElementById("form0").reset();
$("#btreset").click();
}
}]
});
});
</script>

生成验证码

//验证码上鼠标移入事件
function sho() {
var b = document.getElementById("b");
b.innerHTML = "点击切换验证码";
}
//验证码上鼠标移出事件
function hid() {
var b = document.getElementById("b");
b.innerHTML = "";
}
---------------------------------
//点击刷新验证码
function reCode() {
$("#code").attr("src", "/admin/Vcode/Vcode?rid="+Math.random());
}
---------------------------------
<tr>
<th>@Html.DisplayNameFor(c=>c.Vcode)</th>
<td>
@Html.TextBoxFor(c => c.Vcode, new {style="width:100px" })
<img id="code" onclick="reCode()" onmouseover="sho();" onmouseout="hid();" src="/admin/Vcode/Vcode" style="width:65px;height:25px;cursor:pointer" />
<span id="b" style="color:#0094ff"></span>
@Html.ValidationMessageFor(c=>c.Vcode)
</td>
</tr>

生成验证码 单独建一个控制器
------------------------------
ajax 请求成功回调函数 OnSuccess="success" 用的很多 在此进行封装

function success(){

helper.CheckStatus(ajaxobj, function () {
if (ajaxobj.status == 1) {
$.ligerDialog.error(ajaxobj.msg, "错误提示");
return;
}
//此处会跳转到admin/Home/index
$.ligerDialog.success(ajaxobj.msg, "成功提示", function () {
window.location = ‘@Url.Action("index","Home")‘
});
//就算用户不点击延迟2秒钟 也能自己跳转
setTimeout(function () {
window.location = ‘@Url.Action("index","Home")‘
}, 2000);
});

}

在Scripts 文件夹中 见一个admin文件夹 再在此文件夹里 建一个 common.js 文件 封装在这文件里

var helper = {
//1.0封装所有的状态判断方法
CheckStatus:function(ajaxobj,callback){
if (ajaxobj.status == 1)//表示异常
{
$.ligerDialog.error(ajaxobj.msg);
} else if (ajaxobj.status == 2)//表示未登录
{
$.ligerDialog.error(ajaxobj.msg, "未登录提醒", function () {
window.top.location = "/admin/login/login";
});
//为点击确定 2秒自动跳转登录页面
setTimeout(function () { window.top.location = "/admin/login/login"; }, 2000);
} else if (ajaxobj.status == 3)//表示没有权限访问action
{
$.ligerDialog.warn(ajaxobj.msg, "无权限提醒");
} else
{
//触发正常逻辑处理
callback();
}
}

时间: 2024-08-22 12:58:38

优化EF以及登录验证的相关文章

ThinkPHP之登录验证

我比较懒,估计写的不是很完整 <?php /** * Created by dreamcms. * User: Administrator * Date: 2016/9/5 * Time: 17:15 */ namespace Admin\Controller; use Think\Controller; class LoginController extends CommonController{ //视图显示 public function Login(){ $this->display(

python学习之最简单的用户注册及登录验证小程序

文章都是从我的个人博客上粘贴过来的哦,更多内容请点击 http://www.iwangzheng.com 正如很多同学所知道的,楼主开始学习python了,前进的道路曲曲折折,有荆棘也有陷阱,从最简单的小程序写起,每天练习,将python进行到底. 有一点比较别扭的就是python的换行之后空四个空格,ruby都是两个,并且python在方法和循环语句的第一句都要加冒号 mysql> show create table user; mysql> alter table user add sal

Shiro安全框架入门篇(登录验证实例详解与源码)

一.Shiro框架简单介绍 Apache Shiro是Java的一个安全框架,旨在简化身份验证和授权.Shiro在JavaSE和JavaEE项目中都可以使用.它主要用来处理身份认证,授权,企业会话管理和加密等.Shiro的具体功能点如下: (1)身份认证/登录,验证用户是不是拥有相应的身份: (2)授权,即权限验证,验证某个已认证的用户是否拥有某个权限:即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色.或者细粒度的验证某个用户对某个资源是否具有某个权限: (3)会话管理,即用户登录

Java Web Filter登录验证

初做网站需要登录验证,转自 :http://blog.csdn.net/daguanjia11/article/details/48995789 Filter: Filter是服务器端的组件,用来过滤web请求.当发生一个web请求时,web容器会先检查请求的URL是否设置了Filter,如果设置了,则执行该Filter的doFilter方法.所有Filter都实现了javax.servlet.Filter接口,doFilter是定义在该接口中的最重要的方法. 最常见的使用过滤器的例子有:登录访

用户密码登录验证

#登录验证小程序 user_ku = [['name1','psw1'],['name2','psw2']] #用户验证密码库lock_list = [] #锁定用户库,3次登录失败进入的小黑屋canzhao = [] #登录失败的录入,如果用count数出3次,进入锁定 while True: name = input('输入你的用户名:') psw = input('请输入你的密码:') if name in lock_list: #判断用户是否进入小黑屋 print('此账号锁定,不能再用

python 登录验证程序

Name:  LoginAuth.py Fuctions: 登录验证.隐藏输入密码.同一用户3次输入错误密码锁定该账户.如果用户名为yooma密码                  为yooma 则登录成功提示欢迎 code: #!/usr/bin/env python3 #Auther:yooma 2016-08-15 15:00 import sys import getpass c = 1 uname = [] while 1:     username = input("Input us

3月9日(用 DBHelper 工具连接 mysql 数据库 实现登录验证)

一. 用DBHelper 与mysql 连接 实现最简单的登录验证. (1)新建 web project ----->选择src导入 DBHelper 工具包-------->选择web root 下的 index.jsp 制作一个表单(用户名,密码连个提示框以及按钮)-------->用action将这个页面提交到login.jsp进行用户名和密码的正确性验证.具体操作代码如下: 1. index.jsp <body> <form  action="logi

MVC模式编程示例-登录验证(静态)

好,上篇博客分享了本人总结的JSP-Servlet-JavaBean三层架构编程模式的实现思想和基本流程,接下来给大家分享一个MVC编程模式的实现示例-登录验证的过程,这里我仍然用的是静态的验证用户名和密码,连接数据库的过程我其他博客有,这里只是把一个实现过程告诉大家,不多说,见代码: 首先建一个JSP登录页面 其次,我们建一个Servlet类获取客户端提交的信息 然后,我们需要在web.xml配置Servlet选项,好像现在的Eclipse都是自动生成了Servlet的配置代码,不过大家还是看

SpringMVC+Apache Shiro+JPA(hibernate)案例教学(三)给Shiro登录验证加上验证码

序: 给Shiro加入验证码,有多种方式,当然你也可以通过继承修改FormAuthenticationFilter类,通过Shiro去验证验证码.具体实现请百度: 应用Shiro到Web Application(验证码实现) 而今天我要说的,既然使用的SpringMVC,为什么不直接在Controller中就处理验证码验证,让事情变的更简单一点呢? 一.新建ValidateCode.java验证码工具类 package org.shiro.demo.util; import java.util.