项目一:第十一天 2、运单waybill快速录入 3、权限demo演示-了解 5、权限模块数据模型 6、基于shiro实现用户认证-登录(重点)
1、 easyui DataGrid行编辑功能
2、 运单waybill快速录入
3、 权限demo演示-了解
4、 Apache shiro安全框架概述
5、 权限模块数据模型
6、 基于shiro实现用户认证-登录(重点)
1 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>
2 运单快速录入
第一步:修改waybill_quick.html页面中数据表格onAfterEdit事件

查看发送ajax请求信息:

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

验证权限:验证用户是否有权限。
1 演示权限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、 重新启动项目-系统会将权限的数据加载
2 权限概述
认证:系统提供给用户识别身份功能 ,登陆功能就是认证 ----知道你是谁?
授权:系统提供用户分配权限功能—让系统知道你能干什么?
验权:验证用户是否有权限
Shiro 4大核心功能
认证
授权
加密
会话管理


shiro认证流程执行图:

Application Code:应用代码,比如(登陆页面,服务器端登陆方法)-程序员自己编写
Subject: shiro框架提供接口;代表当前“用户”有认证状态,包含权限信息-通过工具类获取
Security Manage: shiro框架提供接口;shiro框架核心;管理所有登陆用户(Subject)
Realm: shiro框架有提供,一般自己编写。访问安全数据(调用service或者dao)查询数据库中用户密码,用户权限,角色。
1 权限模块数据模型
权限demo中数据模型:

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

2 基于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实现用户认证-登录(重点)的更多相关文章
- 运单waybill快速录入
运单waybill快速录入 前台页面: 1修改页面onAfterEdit事件, 后台代码:ajax响应回请求1 为成功,0 为失败
- JAVAEE——BOS物流项目10:权限概述、常见的权限控制方式、apache shiro框架简介、基于shiro框架进行认证操作
1 学习计划 1.演示权限demo 2.权限概述 n 认证 n 授权 3.常见的权限控制方式 n url拦截权限控制 n 方法注解权限控制 4.创建权限数据模型 n 权限表 n 角色表 n 用户表 n ...
- 基于MongodbDB的用户认证-运维笔记
MongoDB默认是不认证的,默认没有账号,只要能连接上服务就可以对数据库进行各种操作,MongoDB认为安全最好的方法就是在一个可信的环境中运行它,保证之后可信的机器才能访问它,可能这些对一些要求高 ...
- 项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示
1 课程计划 1. 常见权限控制方式 2. 基于shiro提供url拦截方式验证权限 3. 在realm中授权 4. 基于shiro提供注解方式验证权限 5. 总结验证权限方式(四种) 6. 用户注销 ...
- ABAP 内表的行列转换-发货通知单-打印到Excel里-NEW-(以运单号为单位显示ALV然后保存输出)
*********************************************************************** * Title : ZSDF003 ...
- 基于MVC4+EasyUI的Web开发框架经验总结(16)--使用云打印控件C-Lodop打印页面或套打报关运单信息
在最新的MVC4+EasyUI的Web开发框架里面,我整合了关于网购运单处理的一个模块,其中整合了客户导单.运单合并.到货扫描.扣仓.出仓.查询等各个模块的操作,里面涉及到一些运单套打的操作,不过由于 ...
- 项目实战10.1—企业级自动化运维工具应用实战-ansible
实战环境: 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测 ...
- JAVAEE——BOS物流项目09:业务受理需求分析、创建表、实现自动分单、数据表格编辑功能使用方法和工作单快速录入
1 学习计划 1.业务受理需求分析 n 业务通知单 n 工单 n 工作单 2.创建业务受理环节的数据表 n 业务通知单 n 工单 n 工作单 3.实现业务受理自动分单 n 在CRM服务端扩展方法根据手 ...
- c# 淘宝运单查询
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
随机推荐
- MySql按周/月/日分组统计数据的方法
知识关键词:DATE_FORMAT select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case grou ...
- eclipse提交Git时忽略文件
为了避免每次使用都有百度查找,自己保存一份,方便使用. 实现方式: Eclipse切换到Navigator视图,找到.gitignore文件(如果是maven项目,一般找作为modules的项目的.g ...
- ie-9 以下ajax无法跨域的问题。只要add:jQuery.support.cors=true;即可
if (!jQuery.support.cors && window.XDomainRequest) { var httpRegEx = /^https?:\/\//i; var ge ...
- derby_学习_00_资源帖
一.精选资料 二.参考资料
- python_广州房价热力图
调用百度地图api,获取经纬度数据,然后在调用百度地图api,生成热力图 import pandas as pd import numpy as np data = pd.read_excel(r'D ...
- JavaScript实现继承的几种重要范式
一 原型链 1. 代码示例 function SuperType() { this.superProperty = true; } SuperType.prototype.getSuperValue ...
- DripRoad(点滴之路)
关于DripRoad DripRoad 意为点滴之路,程序员之路在于点滴积累!是的,这些积累包括技术能力,沟通能力,业务能力等等. 我 我是唐志伟,2009年一个人来上海,就读于上海医疗器械高等专 ...
- Java中Object.hashCode contract
面试时在这个问题上犯了个错误,只重写了equals方法,而没有覆盖hashCode()方法. 回来重读了Effective Java的Item 9,里面提到Object.hashCode contra ...
- 10-28SQLserver基础--数据库管理器(基础操作)
C#基础--数据库(用来存储大量的数据) 操作数据库文件唯一途径 SQL server,结构化查询语言简称SQL. Analysis services:分析挖掘数据 Reporting service ...
- 类型:linux;问题:linux命令;结果:Linux常用命令大全
Linux常用命令大全 QQ空间新浪微博腾讯微博人人网豆瓣网百度空间百度搜藏开心网复制更多1997 系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) una ...