1、 easyui DataGrid行编辑功能

2、 运单waybill快速录入

3、 权限demo演示-了解

4、 Apache shiro安全框架概述

5、 权限模块数据模型

6、 基于shiro实现用户认证-登录(重点)

jQuery EasyUI datagrid行编辑功能使用方式

datagrid的行编辑功能是以为单位,通过列属性指定哪列可以编辑,哪列不能编辑。

 

第一步:通过列属性 editor指定哪列可以编辑 。指定编辑类型(普通,数字,下拉,日期),必填项

第二步:调用数据表格方法

**修改:beginEdit endEdit;当调用结束编辑触发结束编辑事件,在事件中完成操作

**新增:insertRow

**删除:deleteRow

 

 

数据表格的列属性:

 

 

数据表格的方法:开始编辑数据

 

 

 

 

 

在调用结束编辑后,datagrid触发事件。数据表格的结束编辑事件, 删除操作需要单独处理:

 

<table id="dg"></table>

<script type="text/javascript">

var editIdx = -1;  //编辑行记录索引

//创建数据表格

$('#dg').datagrid({

url:'../data/user.json',   //数据来源ajax请求, 响应json数据

columns:[[                 //展示数据

{field:'id',title:'编号',width:100},

{field:'name',title:'姓名',width:100,editor:{

type:"validatebox",  //validatebox普通输入框    numberbox:数字框

options:{required:true}   //指定编辑后数据-必填

}},

{field:'age',title:'年龄',width:100,align:'right',editor:{

type:"numberbox",

options:{required:true}

}}

]],

pagination:true,

/* 分页栏, 提交两个参数:page(当前页)  rows(每页显示记录数)

响应数据格式:json对象

{

total:100,  //总记录数

rows:[{},{}]  //当前页记录

}

*/

toolbar: [{   //工具栏

iconCls: 'icon-add',

text:'增加',

handler: function(){

//在数据表格中新增一条记录

//插入新的一行在第一排的位置

$('#dg').datagrid('insertRow',{

index: 0, // index start with 0

row: {  //行记录

}

});

$('#dg').datagrid("beginEdit", 0);

editIdx = 0;

}

},{   //工具栏

iconCls: 'icon-edit',   //显示图标样式

text:'修改',              //显示文本

handler: function(){     //点击事件

var rows = $("#dg").datagrid("getSelections");

//获取编辑行索引

var idx =  $("#dg").datagrid("getRowIndex", rows[0]);

//调用开始编辑数据 beginEdit

$("#dg").datagrid("beginEdit", idx);

editIdx = idx;

}

},{

iconCls: 'icon-save',   //显示图标样式

text:'保存',              //显示文本

handler: function(){     //点击事件

//调用结束编辑数据 beginEdit  触发结束编辑事件,在结束编辑事件中发送请求,请求服务器

$("#dg").datagrid("endEdit", editIdx);

}

},{

iconCls: 'icon-remove',

text:'删除',

handler: function(){

var rows = $("#dg").datagrid("getSelections");

for(var i =0;i<rows.length;i++){

//获取删除行索引

var idx =  $("#dg").datagrid("getRowIndex", rows[i]);

$("#dg").datagrid("deleteRow", idx);

}

$.post("userAction_delea.action",{},function(data){

})

}

}] ,

striped:true,

rownumbers:true,

pageSize:2,

pageList:[2,5,6],

//仅仅调用结束编辑方法后自动触发

onAfterEdit:function(rowIndex, rowData, changes){

//   rowIndex: 编辑行索引,从0

//   rowData: 对应的记录编辑行

//   changes: 更改的字段/值对

console.info(rowData);

$.post("userAction_save.action",rowData,function(data){

  //

  })

}

});

</script>

运单快速录入

第一步:修改waybill_quick.html页面中数据表格onAfterEdit事件

 

 

查看发送ajax请求信息:

 

第二步:创建运单相关的Action、Service、Dao实现数据库操作

 

 

 

 

验证权限:验证用户是否有权限。

演示权限demo(了解)

项目使用ssh实现。

 

1、 导入项目

2、 创建数据库

 

3、 启动项目完成自动建表

 

4、 手动向用户表中添加一条用户记录

INSERT INTO itcast_user(id,loginName,PASSWORD) VALUES(1,'admin',MD5('admin'));

5、 执行资料中权限数据脚本:

INSERT INTO `itcast_privilege` VALUES ('1', '系统管理', null, null);

INSERT INTO `itcast_privilege` VALUES ('2', '角色管理', '/roleAction_list', '1');

INSERT INTO `itcast_privilege` VALUES ('3', '部门管理', '/departmentAction_list', '1');

INSERT INTO `itcast_privilege` VALUES ('4', '用户管理', '/userAction_list', '1');

INSERT INTO `itcast_privilege` VALUES ('5', '角色列表', '/roleAction_list', '2');

INSERT INTO `itcast_privilege` VALUES ('6', '角色删除', '/roleAction_delete', '2');

INSERT INTO `itcast_privilege` VALUES ('7', '角色添加', '/roleAction_save', '2');

INSERT INTO `itcast_privilege` VALUES ('8', '角色修改', '/roleAction_update', '2');

INSERT INTO `itcast_privilege` VALUES ('9', '部门列表', '/departmentAction_list', '3');

INSERT INTO `itcast_privilege` VALUES ('10', '部门删除', '/departmentAction_delete', '3');

INSERT INTO `itcast_privilege` VALUES ('11', '部门添加', '/departmentAction_save', '3');

INSERT INTO `itcast_privilege` VALUES ('12', '部门修改', '/departmentAction_update', '3');

INSERT INTO `itcast_privilege` VALUES ('13', '用户列表', '/userAction_list', '4');

INSERT INTO `itcast_privilege` VALUES ('14', '用户删除', '/userAction_delete', '4');

INSERT INTO `itcast_privilege` VALUES ('15', '用户添加', '/userAction_save', '4');

INSERT INTO `itcast_privilege` VALUES ('16', '用户修改', '/userAction_update', '4');

INSERT INTO `itcast_privilege` VALUES ('17', '用户初始化密码', '/userAction_reSetPassword', '4');

INSERT INTO `itcast_privilege` VALUES ('21', '设置权限', '/roleAction_setPrivilege', '2');

6、 重新启动项目-系统会将权限的数据加载

权限概述

认证:系统提供给用户识别身份功能 ,登陆功能就是认证 ----知道你是谁?

授权:系统提供用户分配权限功能让系统知道你能干什么?

 

验权:验证用户是否有权限

Shiro 4大核心功能

认证

授权

加密

会话管理

 

 

 

shiro认证流程执行图:

 

Application Code:应用代码,比如(登陆页面,服务器端登陆方法)-程序员自己编写

Subject:  shiro框架提供接口;代表当前“用户”有认证状态,包含权限信息-通过工具类获取

Security Manage: shiro框架提供接口;shiro框架核心;管理所有登陆用户(Subject)

Realm:   shiro框架有提供,一般自己编写。访问安全数据(调用service或者dao)查询数据库中用户密码,用户权限,角色。

权限模块数据模型

权限demo中数据模型:

 

Demo中权限表中:有权限数据,有菜单数据,混合到一起。

 

 

 

 

基于Apache shiro实现认证(登陆)

手动增加一条用户记录:密码进行加密   admin-------21232f297a57a5a743894a0e4a801fc3

2.1 登陆页面处理(应用代码)

页面:login.jsp

1、 给input增加相关的name

2、 提交表单,发送登陆请求

 

 

服务端新建三层对象。。。。

3、 服务端创建三层对象,完成注入

 

2.2 搭建shiro环境

1、 在web.xml中配置代理spring提供过滤器。注意:一定放在struts2核心过滤器之前

<!-- spring提供过滤器 -->

<filter>

<filter-name>shiroFilter</filter-name>

<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>

</filter>

<filter-mapping>

<filter-name>shiroFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

2、 问题:找不到bean对象

 

3、 解决:在spring配置文件中配置对象,对象名称跟上面过滤器名称一致

 

 

基于shiro实现认证(登陆)

完善userAction中登陆:applicationCode --->Subject----->securityManager------->自定义realm

 

创建realm完善realm中认证方法:

 

 

/**

* @Description: 基于shiro框架实现登陆

*/

@Action("userAction_login")

public String login() throws Exception {

if(StringUtils.isNotBlank(checkcode)){

String  realChecode = (String) ServletActionContext.getRequest().getSession().getAttribute("key");

if(checkcode.equals(realChecode)){

//获取当前登陆用户

Subject subject = SecurityUtils.getSubject();

//判断当前用户登陆状态

if(subject.isAuthenticated()){

return "index";

}else{

//开始认证  认证状态:未认证

//创建认证令牌-用户名密码令牌

AuthenticationToken token = new UsernamePasswordToken(model.getUsername(), Md5Util.encode(model.getPassword()));

try {

subject.login(token);

//用户认证通过 subject对象变为 认证通过

//将用户登陆信息存在session

User user = (User) subject.getPrincipal();

ServletActionContext.getRequest().getSession().setAttribute("loginUser", user);

return "index";

} catch (Exception e) {

if(e instanceof UnknownAccountException){

this.addActionError("用户名输入错误");   //login.jsp中 通过struts2标签展示错误信息  <s:actionerror>

}

if(e instanceof IncorrectCredentialsException){

}

//用户名密码有误

e.printStackTrace();

}

}

}

}

return "login";

}

注意:在spring配置文件中将realm对象注入安全管理器:

<!-- 配置realm对象 -->

<bean id="bosRealm" class="com.itheima.bos.realm.BosRealm"></bean>

<!-- 配置安全管理器对象:shiro框架核心 -->

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">

<!-- 注入realm -->

<property name="realm" ref="bosRealm"></property>

</bean>

项目一:第十一天 2、运单waybill快速录入 3、权限demo演示-了解 5、权限模块数据模型 6、基于shiro实现用户认证-登录(重点)的更多相关文章

  1. 运单waybill快速录入

    运单waybill快速录入 前台页面: 1修改页面onAfterEdit事件, 后台代码:ajax响应回请求1 为成功,0 为失败

  2. JAVAEE——BOS物流项目10:权限概述、常见的权限控制方式、apache shiro框架简介、基于shiro框架进行认证操作

    1 学习计划 1.演示权限demo 2.权限概述 n 认证 n 授权 3.常见的权限控制方式 n url拦截权限控制 n 方法注解权限控制 4.创建权限数据模型 n 权限表 n 角色表 n 用户表 n ...

  3. 基于MongodbDB的用户认证-运维笔记

    MongoDB默认是不认证的,默认没有账号,只要能连接上服务就可以对数据库进行各种操作,MongoDB认为安全最好的方法就是在一个可信的环境中运行它,保证之后可信的机器才能访问它,可能这些对一些要求高 ...

  4. 项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示

    1 课程计划 1. 常见权限控制方式 2. 基于shiro提供url拦截方式验证权限 3. 在realm中授权 4. 基于shiro提供注解方式验证权限 5. 总结验证权限方式(四种) 6. 用户注销 ...

  5. ABAP 内表的行列转换-发货通知单-打印到Excel里-NEW-(以运单号为单位显示ALV然后保存输出)

    *********************************************************************** * Title           : ZSDF003  ...

  6. 基于MVC4+EasyUI的Web开发框架经验总结(16)--使用云打印控件C-Lodop打印页面或套打报关运单信息

    在最新的MVC4+EasyUI的Web开发框架里面,我整合了关于网购运单处理的一个模块,其中整合了客户导单.运单合并.到货扫描.扣仓.出仓.查询等各个模块的操作,里面涉及到一些运单套打的操作,不过由于 ...

  7. 项目实战10.1—企业级自动化运维工具应用实战-ansible

    实战环境: 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测 ...

  8. JAVAEE——BOS物流项目09:业务受理需求分析、创建表、实现自动分单、数据表格编辑功能使用方法和工作单快速录入

    1 学习计划 1.业务受理需求分析 n 业务通知单 n 工单 n 工作单 2.创建业务受理环节的数据表 n 业务通知单 n 工单 n 工作单 3.实现业务受理自动分单 n 在CRM服务端扩展方法根据手 ...

  9. c# 淘宝运单查询

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

随机推荐

  1. cassandra集群环境搭建——注意seeds节点,DHT p2p集群管理难道初始化都应如此吗?

    解压cassandra的安装包后可以查看主要的配置文件,都在conf/目录下,conf/cassandra.yaml比较重要,其中需要着重注意的有以下一些配置项: cluster_name: 'TC0 ...

  2. (转)Java发送http请求(get 与post方法请求)

    本文转载于:http://bijian1013.iteye.com/blog/2166855 package com.bijian.study; import java.io.BufferedRead ...

  3. 31 python下实现并发编程

    一 背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所 ...

  4. datatable绑定comboBox,在下拉菜单中显示对应数据

    实现功能: datatable绑定comboBox,在下拉菜单中显示对应数据 实现方法: .生成datatable,并为combox绑定数据源: comboBox1.DataSource = dt1; ...

  5. c++ 修改stl set中的元素

    set的迭代器it有const修饰符,那么对它元素的修改就必然不能成功了.但是有时候遇到要修改stl set元素的问题,这个问题一般的解决方法是先erase这个元素,然后再insert,这样效率很低, ...

  6. 总结:实体类和(XML或二进制)之间相互转(序列化和反序列化)

    XML和实体类之间相互转换(序列化和反序列化) C# XML反序列化与序列化举例:XmlSerializer XML文件与实体类的互相转换   通过我前面的几篇收藏的文章,今天来自己做个对实体类对象序 ...

  7. 学习动态性能表(21)v$lincense

    学习动态性能表 第20篇--v$lincense  2007.6.15 本节主要参数: SESSION_MAX:实例允许的并发最大session数量 SESSION_WARNING:当前实例警告的并发 ...

  8. PHP判断键值数组是否存在,使用empty或isset或array_key_exists(转)

    一个例子 猜猜看,下面的例子会输出什么? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <?php $a = array('a'=>1, 'b'=>0, 'c'= ...

  9. nginx与二级域名的绑定 nginx安装

    nginx中文文档 http://www.nginx.cn/doc/ nginx 查看配置文件地址 http://blog.csdn.net/ljfrocky/article/details/5052 ...

  10. 第 十六 课 Map

    Map 是一种无序的键值对的集合 var mymap map[string]string //先声明一个字典(map)名字叫做mymap,其key所对应的数据类型是string[字符串],value所 ...