href=“ui/themes/default/easyui.css”>
style=“float: left; margin-left: 40px; height: 200px; border: 0px solid red”>
src=‘images/erp.jpg’ id=‘admin’ />
style=“float: left; margin-left: 40px; height: 200px; border: 0px solid red”> 请输入用户名
name=“username” placeholder=“请输入用户名” id=“signup_name”> 请输入密码
name=“pwd” placeholder=“请输入密码” id=“signup_password”> 访问登录页面http://localhost:8080/erp/login.html 访问成功 增加showName方法 /* */ public void showName() { // 获取当前登录的用户 Emp emp = (Emp) ActionContext.getContext().getSession().get(“loginUser”);// 先把用户的信息放到session当中 // session是否会超时,用户是否登录过 if (null != emp) { ajaxReturn(true, emp.getName()); }else { ajaxReturn(false, “”); } } 欢迎: 修改密码 安全退出 $(function(){ //显示登录用户名 showName(); InitLeftMenu(); tabClose(); tabCloseEven(); }) /* */ function showName(){ $.ajax({ url:‘login_showName’, dataType:‘json’, type:‘post’, success:function(rtn){ //判断是否存在用户登录用户 if(rtn.success){ $(‘#username’).html(rtn.name); }else{ location.href=“login.html”; } } }); } /* */ public void loginOut() { ActionContext.getContext().getSession().remove(“loginUser”); } $(function(){ //显示登陆用户名 showName(); tabClose(); tabCloseEven(); //安全退出登录 $(‘#loginOut’).bind(‘click’,function(){ $.ajax({ url:‘login_loginOut’, success:function(){ location.href=“login.html”; } }); }); }) 测试退出登录 成功返回到了登录页面 [](()二、主界面(菜单的动态读取) private List public List return menus; } public void setMenus(List this.menus = menus; } public T get(String id){ return getHibernateTemplate().get(entityClass, id); } /* */ public void getMenuTree() { //通过获取主菜单,资关联就会带出旗下所有的菜单 System.out.println(“===============”); Menu menu = menuBiz.get(“0”); System.out.println(menu); write(JSON.toJSONString(menu)); } // 获取菜单数据 $.ajax({ url : ‘menu_getMenuTree’, type : ‘post’, dataType : ‘json’, success : function(rtn) { // 给菜单赋值 _menus = rtn; InitLeftMenu(); } }); 测试运行运行成功 [](()三、密码加密 修改erp_parent下的POM.xml文件 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201031200128663.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NzU3MDM0,size_16,color_FFFFFF,t_70#pic_center) org.apache.shiro shiro-core ${shiro.ver} org.apache.shiro shiro-web ${shiro.ver} org.apache.shiro shiro-spring ${shiro.ver} org.apache.shiro shiro-aspectj ${shiro.ver} /* */ 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);//将 } 替换add方法当中的加密 上面的方式虽然实现了功能但是密码的加密应该在业务层进行 抽取加密方法到业务层当中 将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 implements IEmpDao { /* */ public Emp findByUsernameAndPwd(String username, String pwd) { String hql = “from Emp where username = ? and pwd = ?”; System.out.println(pwd); List list = (List) 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); } } [](()四、修改密码 void updatePwd(Long uuid, String newPwd); //修改密码 @Override public void updatePwd(Long uuid, String newPwd) { String hql = “update Emp set pwd = ? where uuid = ?”; this.getHibernateTemplate().bulkUpdate(hql, newPwd,uuid); } public void updatePwd(Long uuid, String oldPwd, String newPwd); package com.itzheng.erp.exception; public class ErpException extends RuntimeException { public ErpException(String message) { super(message); } } @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); } /* */ public Emp getLoginUser() { Emp emp = (Emp) ActionContext.getContext().getSession().get(“loginUser”); return emp; } // 修改密码调用的方法 // 修改密码调用的方法 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, “修改密码失败”)); } } style=“padding: 10px; background: #fff;”> $.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、在业务层处理异常信息
[](()4、登录功能的实现以及测试
[](()(六)显示用户登录名
[](()1、action的修改
[](()2、前端页面的实现
[](()(1)修改index.html页面当中的内容
[](()(2)修改index.jsp页面当中的内容
[](()(七)退出登录
[](()1、修改LoginAction:增加loginOut方法
[](()2、修改index.jsp
[](()1、菜单动态读取后端的实现
[](()(1)修改Menu实体类
[](()(2)修改Menu实体类
[](()(3)修改映射文件
[](()(4)在IBaseDao当中get方法
[](()(5)在BaseDao当中重载get方法
[](()(6)在IBaseBiz接口当中
[](()(7)在BaseBiz类当中
[](()(8)在MenuAction当中添加一个方法
[](()2、菜单动态前端的实现
[](()(1)修改index.jsp当中的内容
[](()1、添加shiro依赖
[](()(1)定义shiro版本常量
[](()(2)加入shiro的依赖
[](()(3)修改EmpDao,创建add方法重写父类的add,通过super的方式调用父类的add
[](()2、登录密码的加密
[](()(1)在EmpDao当中,需要单独将加密的方法抽取出来
[](()(2)在EmpDao当中,修改findByUsernameAndPwd方法来实现查询登录时加密
[](()(一)后端的实现
[](()1、修改IEmpDao接口
[](()2、对应的实现类
[](()3、在IEmpBiz当中设置对应的接口
[](()4、在com.itzheng.erp.exception下创建ErpException并继承RuntimeException (自定义异常类型)
[](()5、在实现类EmpBiz当中
[](()6、修改BaseActopn
[](()7、在EmpAction当中
[](()(二)前端的实现
[](()1、修改index.html
旧密码: 新密码: 确认密码:
[](()2、修改index.js当中的内容
[](()3、测试修改密码
[](()(一)后端的实现
[](()1、在业务层的接口当中创建对应的接口
[](()2、在对应的实现类当中实现
[](()3、在EmpAction当中
[](()(二)前端的实现
[](()1、创建pwd.html
员工管理