写点什么

Java 全栈开发 ---Java ERP 系统开发:商业 ERP(七

  • 2022 年 4 月 29 日
  • 本文字数:7582 字

    阅读完需:约 25 分钟

[](()2、菜单动态前端的实现

[](()(1)修改 index.jsp 当中的内容


// 获取菜单数据


$.ajax({


url : 'menu_getMenuTree',


type : 'post',


dataType : 'json',


success : function(rtn) {


// 给菜单赋值


_menus = rtn;


InitLeftMenu();


}


});



测试运行运行成功



[](()三、密码加密



[](()1、添加 shiro 依赖

修改 erp_parent 下的 POM.xml 文件


[](()(1)定义 shiro 版本常量



<shiro.ver>1.2.3</shiro.ver>


[](()(2)加入 shiro 的依赖



<dependency>


<groupId>org.apache.shiro</groupId>


<artifactId>shiro-core</artifactId>


<version>${shiro.ver}</version>


</dependency>


<dependency>


<groupId>org.apache.shiro</groupId>


<artifactId>shiro-web</artifactId>


<version>${shiro.ver}</version>


</dependency>


<dependency>


<groupId>org.apache.shiro</groupId>


<artifactId>shiro-spring</artifactId>


<version>${shiro.ver}</version>


</dependency>


<dependency>


<groupId>org.apache.shiro</groupId>


<artifactId>shiro-aspectj</artifactId>


<version>${shiro.ver}</version>


</dependency>


[](()(3)修改 EmpDao,创建 add 方法重写父类的 add,通过 super 的方式调用父类的 add



/*


  • 新增员工


*/


public void add(Emp emp) {


String pwd = emp.getPwd();


// source : 原密码


// salt;盐-》搅乱码


// hashIterations:散列次数,加密次数


Md5Hash md5 = new Md5Hash(pwd, emp.getUsername(), 2);


// 取出加密后的密码


String newPwd = md5.toString();


System.out.println(newPwd);


//设置为加密后的密码


emp.setPwd(newPwd);


//保存倒数数据库当中


super.add(emp);//将


}

[](()2、登录密码的加密

[](()(1)在 EmpDao 当中,需要单独将加密的方法抽取出来




替换 add 方法当中的加密



[](()(2)在 EmpDao 当中,修改 findByUsernameAndPwd 方法来实现查询登录时加密



上面的方式虽然实现了功能但是密码的加密应该在业务层进行


抽取加密方法到业务层当中


将 empdao 当中所有的加密抽取到业务层


package com.itzheng.erp.dao.impl;


import java.util.List;


import org.apache.shiro.crypto.hash.Md5Hash;


import org.hibernate.criterion.DetachedCriteria;


import org.hibernate.criterion.MatchMode;


import org.hibernate.criterion.Restrictions;


import com.itzheng.erp.dao.IEmpDao;


import com.itzheng.erp.entity.Emp;


/**


  • 员工数据访问类

  • @author Administrator


*/


public class EmpDao extends BaseDao<Emp> implements IEmpDao {


/*


  • 用户登录


*/


public Emp findByUsernameAndPwd(String username, String pwd) {


String hql = "from Emp where username = ? and pwd = ?";


System.out.println(pwd);


List<Emp> list = (List<Emp>) this.getHibernateTemplate().find(hql, username, pwd);// 通过向数据库访问的方式查询对应的内容是否符合


// 能够匹配上,侧返回第一个元素


if (list.size() > 0) {


return list.get(0);


}


// 如果登录名或密码不正确


return null;


}


/**


  • 构建查询条件


*/


public DetachedCriteria getDetachedCriteria(Emp emp1, Emp emp2, Object param) {


DetachedCriteria dc = DetachedCriteria.forClass(Emp.class);


if (emp1 != null) {


if (emp1.getUsername() != null && emp1.getUsername().trim().length() > 0) {


dc.add(Restrictions.like("username", emp1.getUsername(), MatchMode.ANYWHERE));


}


if (emp1.getPwd() != null && emp1.getPwd().trim().length() > 0) {


dc.add(Restrictions.like("pwd", emp1.getPwd(), MatchMode.ANYWHERE));


}


if (emp1.getName() != null && emp1.getName().trim().length() > 0) {


dc.add(Restrictions.like("name", emp1.getName(), MatchMode.ANYWHERE));


}


if (emp1.getEmail() != null && emp1.getEmail().trim().length() > 0) {


dc.add(Restrictions.like("email", emp1.getEmail(), MatchMode.ANYWHERE));


}


if (emp1.getTele() != null && emp1.getTele().trim().length() > 0) {


dc.add(Restrictions.like("tele", emp1.getTele(), MatchMode.ANYWHERE));


}


if (emp1.getAddress() != null && emp1.getAddress().trim().length() > 0) {


dc.add(Restrictions.like("address", emp1.getAddress(), MatchMode.ANYWHERE));


}


// 根据部门查询


if (null != emp1.getDep() && null != emp1.getDep().getUuid()) {


dc.add(Restrictions.eq("dep", emp1.getDep()));


}


// 根据出生年月日查询,其实日期


if (null != emp1.getBirthday()) {


dc.add(Restrictions.ge("birthday", emp1.getBirthday()));


}


}


if (null != emp2) {


// 根据出生年月日查询,结束日期


if (null != emp2.getBirthday()) {


dc.add(Restrictions.le("birthday", emp2.getBirthday()));


}


}


return dc;


}


//修改密码


@Override


public void updatePwd(Long uuid, String newPwd) {


String hql = "update Emp set pwd = ? where uuid = ?";


this.getHibernateTemplate().bulkUpdate(hql, newPwd,uuid);


}


}


[](()四、修改密码



[](()(一)后端的实现

[](()1、修改 IEmpDao 接口


void updatePwd(Long uuid, String newPwd);

[](()2、对应的实现类


//修改密码


@Override


public void updatePwd(Long uuid, String newPwd) {


String hql = "update Emp set pwd = ? where uuid = ?";


this.getHibernateTemplate().bulkUpdate(hql, newPwd,uuid);


}

[](()3、在 IEmpBiz 当中设置对应的接口


public void updatePwd(Long uuid, String oldPwd, String newPwd);

[](()4、在 com.itzheng.erp.exception 下创建 ErpException 并继承 RuntimeException (自定义异常类型)


package com.itzheng.erp.exception;


public class ErpException extends RuntimeException {


public ErpException(String message) {


super(message);


}


}

[](()5、在实现类 EmpBiz 当中


@Override


public void updatePwd(Long uuid, String oldPwd, String newPwd) {


// 取出员工信息


Emp emp = empDao.get(uuid);


// 加密旧密码


String encrypted = encrypt(oldPwd, emp.getUsername());


if (!encrypted.equals(emp.getPwd())) {


// 抛出自定义异常


throw new ErpException("旧密码不正确");


}


newPwd = encrypt(newPwd, emp.getUsername());


// 如果相同就更新对应的密码


empDao.updatePwd(uuid, newPwd);


}

[](()6、修改 BaseActopn


/*


  • 获取登录的用户信息


*/


public Emp getLoginUser() {


Emp emp = (Emp) ActionContext.getContext().getSession().get("loginUser");


return emp;


}

[](()7、在 EmpAction 当中


// 修改密码调用的方法


// 修改密码调用的方法


public void updatePwd() {


Emp loginUser = getLoginUser();


System.out.println(loginUser);


if (null == loginUser) {


write(ajaxReturn(false, "亲!你还没有登录"));


return;


}


try {


empBiz.updatePwd(loginUser.getUuid(), oldPwd, newPwd);


write(ajaxReturn(true, "修改密码成功"));


} catch (Exception e) {


e.printStackTrace();


write(ajaxReturn(false, "修改密码失败"));


}


}

[](()(二)前端的实现

[](()1、修改 index.html


<div id="w" class="easyui-dialog">


<div class="easyui-layout" fit="true">


<div region="center" border="false"


style="padding: 10px; background: #fff;">


<table cellpadding=3>


<tr>


<td>旧密码:</td>


<td><input id="txtOldPass" type="password" class="txt01" /></td>


</tr>


<tr>


<td>新密码:</td>


<td><input id="txtNewPass" type="password" class="txt01" /></td>


</tr>


<tr>


<td>确认密码:</td>


<td><input id="txtRePass" type="password" class="txt01" /></td>


</tr>


</table>


</div>


</div>


</div>

[](()2、修改 index.js 当中的内容

$.ajax({


url : 'emp_updatePwd',


data : {


'oldPwd' : oldPwd,


'newPwd' : newPwd


},


dataType : 'json',


type : 'post',


success : function(rtn) {


$.messager.alert('提示', rtn.message, 'info', function() {


if (rtn.success) {


$('#w').dialog('close');


//清空内容


$('#txtOldPass').val('');


$('#txtNewPass').val('');


$('#txtRePass').val('');


}


});


}


});


[](()3、测试修改密码



[](()五、管理员重置密码



[](()(一)后端的实现

[](()1、在业务层的接口当中创建对应的接口

[](()2、在对应的实现类当中实现

[](()3、在 EmpAction 当中

[](()(二)前端的实现

[](()1、创建 pwd.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">


<html>


<head>


<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">


<title>员工管理</title>


<link rel="stylesheet" type="text/css" href="ui/themes/default/easyui.css">


<link rel="stylesheet" type="text/css" href="ui/themes/icon.css">


<script type="text/javascript" src="ui/jquery.min.js"></script>


<script type="text/javascript" src="ui/jquery.easyui.min.js"></script>


<script type="text/javascript" src="ui/locale/easyui-lang-zh_CN.js"></script>


<script type="text/javascript" src="ui/jquery.serializejson.min.js"></script>


<script type="text/javascript" src="js/crud.js"></script>


<script type="text/javascript" src="ui/date.js"></script>


<script type="text/javascript">


var name="emp";


var height = 300;


var width = 300;


var columns=[[


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


{field:'username',title:'登陆名',width:100},


{field:'name',title:'真实姓名',width:100},


{field:'gender',title:'性别',width:100,formatter:function(value,row,index){


if(1 == value * 1 ){


return '男';


}


if(0 == value * 1){


return '女';


}


} },


{field:'email',title:'邮件地址',width:100},


{field:'tele',title:'联系电话',width:100},


{field:'address',title:'联系地址',width:100},


{field:'birthday',title:'出生年月日',width:100,formatter:function(value){


return new Date(value).Format("yyyy-MM-dd");


} },


{field:'dep',title:'部门编号',width:100,formatter:function(value){


return value.name;


} },


{field:'-',title:'操作',width:200,formatter:function(value,row,index)


{


return "<a href='#' οnclick='edit("+row.uuid+")'>修改</a> <a href='#' οnclick='dele("+row.uuid+")'>删除</a>";


}}


]];


</script>


</head>


<body>


<div class="easyui-panel">


<form id="searchForm">


登陆名:<input name="t1.username" >


登陆密码:<input name="t1.pwd" >


真实姓名:<input name="t1.name" >


性别:<input name="t1.gender" type="radio" value="" >全部


<input name="t1.gender" type="radio" value="0" >女


<input name="t1.gender" type="radio" value="1" >男<br>


邮件地址:<input name="t1.email" >


联系电话:<input name="t1.tele" >


联系地址:<input name="t1.address" >


出生年月日:<input name="t1.birthday" class="easyui-datebox" editable="false" > -> <input name="t2.birthday" class="easyui-datebox" editable="false" >


部门:<input name="t1.dep.uuid" class="easyui-combobox" data-options="


url:'dep_list',textField:'name',valueField:'uuid'


" >


<button type="button" id="btnSearch">查询</button>


</form>


</div>


<table id="grid"></table>


<div id="editWindow" class="easyui-window" title="员工编辑" data-options="closed:true">


<form id="editForm">


<input name="t.uuid" type="hidden">


<table>


<tr>


<td>登陆名</td><td><input name="t.username" class="easyui-validatebox" data-options="


required:true,missingMessage:'登录名不能为空!'


">


</td>


</tr>


<tr>


<td>登陆密码</td><td><input name="t.pwd"> </td>


</tr>


<tr>


<td>真实姓名</td><td><input name="t.name"> </td>


</tr>


<tr>


<td>性别</td>


<td>


<input name="t.gender" type="radio" value="0" > 女


<input name="t.gender" type="radio" value="1" > 男


</td>


</tr>


<tr>


<td>邮件地址</td><td><input name="t.email" class="easyui-validatebox" data-options="


required:true,validType:'email',invalidMessage:'Email 格式不正确'


"> </td>


</tr>


<tr>


<td>联系电话</td><td><input name="t.tele"> </td>


</tr>


<tr>


<td>联系地址</td><td><input name="t.address"> </td>


</tr>


<tr>


<td>出生年月日</td><td><input name="t.birthday" class="easyui-datebox" editable="false" > </td>


</tr>


<tr>


<td>部门</td><td><input name="t.dep.uuid" class="easyui-combobox" data-options="


url:'dep_list',textField:'name',valueField:'uuid',required:'true'


" > </td>


</tr>


</table>


<button id="btnSave" type="button">保存</button>


</form>


</div>


</body>


</html>

[](()2、创建 pwd.js

$(function(){


//加载表格数据


$('#grid').datagrid({


url:'emp_listByPage',


columns:[[


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


{field:'username',title:'登陆名',width:100},


{field:'name',title:'真实姓名',width:100},


{field:'gender',title:'性别',width:100,formatter:function(value, row, index){


value = row.gender;


if(1 == value * 1){


return '男';


}


if(0 == value * 1){


return '女';


}


}},


{field:'email',title:'邮件地址',width:100},


{field:'tele',title:'联系电话',width:100},


{field:'address',title:'联系地址',width:100},


{field:'birthday',title:'出生年月日',width:100,formatter:function(value){


return new Date(value).Format("yyyy-MM-dd");


}},


{field:'dep',title:'部门编号',width:100,formatter:function(value){


return value.name;


}},


{field:'-',title:'操作',width:200,formatter: function(value,row,index){


var oper = "<a href="javascript:void(0)" οnclick="updatePwd_reset(" + row.uuid + ')">重置密码</a>';


return oper;


}}


]],


singleSelect: true,


pagination: true


});


//重置密码的窗口


$('#editDlg').dialog({


title: '重置密码',//窗口标题


width: 260,//窗口宽度


height: 120,//窗口高度


closed: true,//窗口是是否为关闭状态, true:表示关闭


modal: true,//模式窗口


iconCls: 'icon-save',


buttons: [


{


text: '保存',


iconCls: 'icon-save',


handler:function(){


var formdata = $('#editForm').serializeJSON();


$.ajax({


url: 'emp_updatePwd_reset',


data : formdata,


dataType: 'json',


type: 'post',


success:function(rtn){


$.messager.alert('提示',rtn.message,'info',function(){


if(rtn.success){


$('#editDlg').dialog('close');


}


});


}


});


}


}


]


});


});


//打开重置密码窗口


function updatePwd_reset(uuid){


$('#editDlg').dialog('open');


//清空表单


$('#editForm').form('clear');


//加载数据


$('#editForm').form('load',{id: uuid, newPwd:""});


}

[](()(三)访问前端页面


访问 pwd.html 点击重置密码



重新登录设置成功

[](()(四)设置初始密码

[](()1、修改 biz 层的 add 方法


String newPwd = encrypt(emp.getUsername(), emp.getUsername());

[](()2、修改 emp.html 当中的内容


[](()六、解决更新员工信息,密码丢失




修改用户信息后密码丢失



数据库当中密码丢失



使用 session 的持久化不更新 pwd 字段,Hbm.xml 里面加入 update=false 属性,不更新 pwd 字段


上面在更新密码订单时候是使用的 SQL 语句来更新的密码,设置该属性的时候在映射文件当中设置 update=false 属性后是不会影响 SQL 语句更新密码的方法的,所以在更新用户信息的时候设置该属性后就不会更新密码



[](()七、静态页面传参数



[](()1、在 emp_web 下的 ui 当中创建 request.js

var url=location.search;//获取?号后面的字符串


var Request = new Object();//创建 Object 对象


if(url.indexOf("?")!=-1)//判断是否后?号 有?号的时候


{


var str = url.substr(1);//截取字符串当中第 2 个后的字符串(不包括? 的字符串)


strs = str.split("&");//按照 &号分隔字符串,赋值给一个数组


for(var i=0;i<strs.length;i++)//遍历循环


{


//Request 类型的数组,的第分隔前面字符串部分按照=号分隔,


Request[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);


}


}

[](()2、在 supplier.html 当中引入 crud.js

[](()3、在 supplier.html 当中添加一些数据

[](()4、修改 crud.js

[](()5、修改 supplier.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">


<html>


<head>


<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">


<title>供应商管理</title>


<link rel="stylesheet" type="text/css" href="ui/themes/default/easyui.css">


<link rel="stylesheet" type="text/css" href="ui/themes/icon.css">


<script type="text/javascript" src="ui/jquery.min.js"></script>


<script type="text/javascript" src="ui/jquery.easyui.min.js"></script>


<script type="text/javascript" src="ui/locale/easyui-lang-zh_CN.js"></script>


<script type="text/javascript" src="ui/jquery.serializejson.min.js"></script>


<script type="text/javascript" src="ui/request.js"></script>


<script type="text/javascript" src="js/crud.js"></script>


<script type="text/javascript">


if(Request['type'] == 1){


document.title = "供应商管理";


listParam = "?t1.type=1";


}


if(Request['type'] == 2){


document.title = "客户管理";


listParam = "?t1.type=2";


}


var name="supplier";


var columns=[[


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


{field:'name',title:'名称',width:100},


{field:'address',title:'联系地址',width:100},


{field:'contact',title:'联系人',width:100},


{field:'tele',title:'联系电话',width:100},


{field:'email',title:'邮件地址',width:100},


{


return "<a href='#' οnclick='edit("+row.uuid+")'>修改</a> <a href='#' οnclick='dele("+row.uuid+")'>删除</a>";


}}


]];


</script>


</head>


<body>


<div class="easyui-panel">


<form id="searchForm">


名称:<input name="t1.name" >


联系地址:<input name="t1.address" >


联系人:<input name="t1.contact" >


联系电话:<input name="t1.tele" >


邮件地址:<input name="t1.email" >


<button type="button" id="btnSearch">查询</button>


</form>


</div>


<table id="grid"></table>


<div id="editWindow" class="easyui-window" title="供应商编辑"


style="width: 320px;height: 250px" data-options="closed:true">


<form id="editForm">


<input name="t.uuid" type="hidden">


<table>


<tr>


<td>名称</td><td><input name="t.name"> </td>


</tr>


<tr>


<td>联系地址</td><td><input name="t.address"> </td>


</tr>


<tr>


<td>联系人</td><td><input name="t.contact"> </td>


</tr>


<tr>


<td>联系电话</td><td><input name="t.tele"> </td>


</tr>


<tr>

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
Java全栈开发---Java ERP系统开发:商业ERP(七_Java_爱好编程进阶_InfoQ写作社区