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

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请求信息:

 

第二步:创建运单相关的ActionServiceDao实现数据库操作

 

 

 

 

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

演示权限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>

猜你喜欢

转载自www.cnblogs.com/shan1393/p/9250702.html