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

Java全栈开发---Java ERP系统开发:商业ERP(七_第1张图片

Java全栈开发---Java ERP系统开发:商业ERP(七_第2张图片

Java全栈开发---Java ERP系统开发:商业ERP(七_第3张图片

[](()2、在login.html当中设置对应的属性

Zeo·ERP企业资源管理系统

href=“ui/themes/default/easyui.css”>

Zeo·ERP企业资源管理系统

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”>


记住我

[](()3、在业务层处理异常信息

Java全栈开发---Java ERP系统开发:商业ERP(七_第4张图片

[](()4、登录功能的实现以及测试

访问登录页面http://localhost:8080/erp/login.html

Java全栈开发---Java ERP系统开发:商业ERP(七_第5张图片

访问成功

Java全栈开发---Java ERP系统开发:商业ERP(七_第6张图片

[](()(六)显示用户登录名

[](()1、action的修改

增加showName方法

Java全栈开发---Java ERP系统开发:商业ERP(七_第7张图片

/*

  • 显示登录用户

*/

public void showName() {

// 获取当前登录的用户

Emp emp = (Emp) ActionContext.getContext().getSession().get(“loginUser”);// 先把用户的信息放到session当中

// session是否会超时,用户是否登录过

if (null != emp) {

ajaxReturn(true, emp.getName());

}else {

ajaxReturn(false, “”);

}

}

[](()2、前端页面的实现

[](()(1)修改index.html页面当中的内容

Java全栈开发---Java ERP系统开发:商业ERP(七_第8张图片

欢迎:

修改密码 安全退出

[](()(2)修改index.jsp页面当中的内容

Java全栈开发---Java ERP系统开发:商业ERP(七_第9张图片

$(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”;

}

}

});

}

[](()(七)退出登录

[](()1、修改LoginAction:增加loginOut方法

Java全栈开发---Java ERP系统开发:商业ERP(七_第10张图片

/*

  • 退出登录

*/

public void loginOut() {

ActionContext.getContext().getSession().remove(“loginUser”);

}

[](()2、修改index.jsp

Java全栈开发---Java ERP系统开发:商业ERP(七_第11张图片

$(function(){

//显示登陆用户名

showName();

tabClose();

tabCloseEven();

//安全退出登录

$(‘#loginOut’).bind(‘click’,function(){

$.ajax({

url:‘login_loginOut’,

success:function(){

location.href=“login.html”;

}

});

});

})

测试退出登录

Java全栈开发---Java ERP系统开发:商业ERP(七_第12张图片

成功返回到了登录页面

Java全栈开发---Java ERP系统开发:商业ERP(七_第13张图片

[](()二、主界面(菜单的动态读取)


[](()1、菜单动态读取后端的实现

[](()(1)修改Menu实体类

Java全栈开发---Java ERP系统开发:商业ERP(七_第14张图片

private List

menus;

public List

getMenus() {

return menus;

}

public void setMenus(List

menus) {

this.menus = menus;

}

[](()(2)修改Menu实体类

Java全栈开发---Java ERP系统开发:商业ERP(七_第15张图片

[](()(3)修改映射文件

Java全栈开发---Java ERP系统开发:商业ERP(七_第16张图片

[](()(4)在IBaseDao当中get方法

Java全栈开发---Java ERP系统开发:商业ERP(七_第17张图片

[](()(5)在BaseDao当中重载get方法

Java全栈开发---Java ERP系统开发:商业ERP(七_第18张图片

public T get(String id){

return getHibernateTemplate().get(entityClass, id);

}

[](()(6)在IBaseBiz接口当中

Java全栈开发---Java ERP系统开发:商业ERP(七_第19张图片

[](()(7)在BaseBiz类当中

Java全栈开发---Java ERP系统开发:商业ERP(七_第20张图片

[](()(8)在MenuAction当中添加一个方法

Java全栈开发---Java ERP系统开发:商业ERP(七_第21张图片

/*

  • 获取菜单数据

*/

public void getMenuTree() {

//通过获取主菜单,资关联就会带出旗下所有的菜单

System.out.println(“===============”);

Menu menu = menuBiz.get(“0”);

System.out.println(menu);

write(JSON.toJSONString(menu));

}

[](()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版本常量

在这里插入图片描述

1.2.3

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

![在这里插入图片描述](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}

[](()(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 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);

}

}

[](()四、修改密码


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

[](()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

在这里插入图片描述

style=“padding: 10px; background: #fff;”>

旧密码: 新密码: 确认密码:

[](()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

员工管理

登陆名:

登陆密码:

真实姓名:

性别:全部


邮件地址:

联系电话:

联系地址:

出生年月日: ->

部门:

你可能感兴趣的:(Java,经验分享,架构,java)