1、用户表和部门表数据库设计整体的项目使用Layui框架搭建完成
; ; ; ; ; ; CREATE DATABASE `db_hotel_jt11` ; USE `db_hotel_jt11`; DROp TABLE IF EXISTS `sys_dept`; CREATE TABLE `sys_dept` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '部门编号', `deptname` varchar(50) DEFAULT NULL COMMENT '部门名称', `address` varchar(255) DEFAULT NULL COMMENT '地址', `createDate` datetime DEFAULT NULL COMMENT '创建时间', `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS `sys_employee`; CREATE TABLE `sys_employee` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '员工编号', `loginname` varchar(50) DEFAULT NULL COMMENT '登录账号', `loginpwd` varchar(200) DEFAULT NULL COMMENT '登录密码', `name` varchar(50) DEFAULT NULL COMMENT '真实姓名', `sex` int(11) DEFAULT NULL COMMENT '性别(1-男 2-女)', `deptId` int(11) DEFAULT NULL COMMENT '部门编号', `hiredate` datetime DEFAULT NULL COMMENT '入职日期', `salt` varchar(100) DEFAULT NULL COMMENT '加密盐值', `createdBy` int(11) DEFAULT NULL COMMENT '创建人', `createDate` datetime DEFAULT NULL COMMENT '创建时间', `modifyBy` int(11) DEFAULT NULL COMMENT '修改人', `modifyDate` datetime DEFAULT NULL COMMENT '修改时间', `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ; ; ; ;2、项目创建
-
创建MavebWeb项目工程ssm_hotel
-
导入项目依赖坐标pom.xml
5.2.8.RELEASE 3.5.5 2.0.5 8.0.19 1.2.73 2.11.2 org.springframework spring-context ${spring.version} org.aspectj aspectjweaver 1.8.7 org.springframework spring-jdbc ${spring.version} org.springframework spring-tx ${spring.version} org.springframework spring-test ${spring.version} org.mybatis mybatis ${mybatis.version} org.mybatis mybatis-spring ${mybatis-spring.version} mysql mysql-connector-java ${mysql.version} commons-logging commons-logging 1.2 commons-dbcp commons-dbcp 1.4 log4j log4j 1.2.17 junit junit 4.13 test org.springframework spring-web ${spring.version} org.springframework spring-webmvc ${spring.version} javax.servlet.jsp jsp-api 2.2 provided javax.servlet javax.servlet-api 4.0.1 provided org.hibernate hibernate-validator 5.4.3.Final com.alibaba fastjson ${fast-json.version} com.fasterxml.jackson.core jackson-core ${jackson.version} com.fasterxml.jackson.core jackson-databind ${jackson.version} commons-io commons-io 2.7 commons-fileupload commons-fileupload 1.4 org.apache.shiro shiro-core 1.6.0 jstl jstl 1.2 -
创建包文件
-
导入核心配置在resources文件夹下
对于配置文件的一些修改需要根据自己的包名来修改,可能配置文件的包扫描不是当前的包
- applicationContext.xml
- database.properties
- log4j.properties
- mybatis-config.xml
- springmvc.xml
-
导入web.xml配置文件
4、实体类的创建(与数据库表同名)login.jsp org.springframework.web.context.ContextLoaderListener contextConfigLocation classpath:applicationContext*.xml springmvc org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:springmvc.xml springmvc / encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true encodingFilter @Controller @RequestMapping("/admin") public class SystemController { @RequestMapping("/login.html") public String login(){ return "admin/login"; } } 在com.zcl.entity包下进行创建
后面的get和set方法就省略不写了
public class Employee { private Integer id;//员工编号 private String loginName;//登录名称 private String loginPwd;//登录密码 private String name;//真实姓名 private Integer sex;//性别 1-男 2-女 private Integer deptId;//所属部门 private Date hireDate;//入职日期 private String salt;//加密盐值 private Integer createdBy;//创建人 private Date createDate;//创建时间 private Integer modifyBy;//修改人 private Date modifyDate;//修改时间 private String remark;//备注 }5、创建mapper接口和映射文件com.zcl.dao层的接口为如下
public interface EmployeeMapper { Employee findEmployeeByLoginName(String loginName); }接口的映射文件如下,存放在resources.mapper包下
6、创建service业务层代码在com.zcl.service包下写业务接口
public interface EmployeeService { Employee login(String loginName,String loginPwd); }创建impl包并创建接口实现类
package com.zcl.service.impl; import com.zcl.dao.EmployeeMapper; import com.zcl.entity.Employee; import com.zcl.service.EmployeeService; import com.zcl.utils.PasswordUtil; import com.zcl.utils.SystemConstant; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; @Service @Transactional public class EmployeeServiceimpl implements EmployeeService { @Resource EmployeeMapper employe; public Employee login(String loginName, String loginPwd) { // 1、根据账号查询员工信息方法 Employee employeeByLoginName = employe.findEmployeeByLoginName(loginName); // 2、判断数据是否为空 if(employeeByLoginName!= null){ // 将密码进行加密对比,后面的加密次数使用的外部的接口声明,方便后面的修改 String namePassword = PasswordUtil.md5(loginPwd, employeeByLoginName.getSalt(), SystemConstant.PASSWORD_COUNT); // 比较密码是否一致 if(employeeByLoginName.getLoginPwd().equals(namePassword)){ // 登录成功 return employeeByLoginName; } } // 登录失败 return null; } }在utils根据包下创建SystemConstant接口,里面定义一些常量
package com.zcl.utils; public interface SystemConstant { Integer PASSWORD_COUNT = 5; }7、controller控制器的编写控制器都写在com.zcl.controller.admin包下,控制器不在返回视图等内容,无刷新使用@RestController注解,表示@ResponseBody和@Controller在内了,返回【json数据】,后面就不在使用他一一注解了,减少报错
package com.zcl.controller.admin; import com.alibaba.fastjson.JSON; import com.zcl.entity.Employee; import com.zcl.service.EmployeeService; import com.zcl.utils.SystemConstant; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.servlet.http.HttpSession; import java.util.HashMap; @RestController @RequestMapping("/admin/employee") public class EmployeeController { @Resource EmployeeService employeeService; @RequestMapping("/login") public String login(String username, String password, HttpSession session){ // 创建HasMap存储数据 HashMapobjectHashMap = new HashMap (); // 查询数据 Employee employe = employeeService.login(username, password); // 判断数据 if(employe != null){ // 保存当前用户 session.setAttribute(SystemConstant.LOGINUSER,employe); objectHashMap.put(SystemConstant.SUCCESS,true); }else { objectHashMap.put(SystemConstant.MESSAGES,false); objectHashMap.put(SystemConstant.MESSAGES,"账号密码错误,请重新登录"); } return JSON.toJSONString(objectHashMap); } } 上面的几个常量都在SystemConstant接口中添加上
String LOGINUSER = "loginUser"; String SUCCESS = "succser"; String MESSAGES = "messages";
8、页面端方式请求// 进行登录操作 form.on('submit(login)', function (data) { // 获取到表单的所有数据data data = data.field; if (data.username == '') { layer.msg('用户名不能为空'); return false; } if (data.password == '') { layer.msg('密码不能为空'); return false; } if (data.captcha == '') { layer.msg('验证码不能为空'); return false; } $.post("/admin/employee/login",data,function (result){ if(result.succser){ location.href="home.html"; }else { layer.msg(result.messages); } },"json"); return false; // 禁止跳转页面 }); });添加数据库的第一条员工数据
关于加密的密码和加密的盐,需要找到加密工具进行生产
9、创建404.jsp页面启动页面进行登录,如果登录成功就会跳转到 http://localhost:8080/admin/home.html 页面,因为没有这个页面所以就会显示404
在SystemController控制器中创建跳转404的页面
@RequestMapping("/404.html") public String fff() { return "admin/404"; }
10、创建上一文中的home.jsp主页面修改登录后的跳转页面为当前请求的虚拟路径admin/404.html
在SystemController控制器中定义后台首页的转发路径
@RequestMapping("/home.html") public String home() { return "admin/home"; }10.1、修改登录后的名称【右上角】${sessionScope.loginUser.name}10.2、员工退出在SystemController控制器下编写,但是建议在EmployeeController员工控制器中写,在员工控制器里面使用了@RestController注解不处理逻辑视图操作,就将他写在了当前的SystemController控制器
@RequestMapping("/logout.html") public String logout(HttpSession session) { // 清除session方式一 // session.removeAttribute(SystemConstant.LOGINUSER); // 清除方式二 session.invalidate(); // 重定向登录页面 return "redirect:/admin/login.html"; }前端页面请求按钮
$('.login-out').on("click", function () { // 推出询问 layer.confirm("您确定要推出吗?",{icon:3,title:"退出确认"},function(index){ location.href = "/admin/logout.html"; layer.close(index); }); });11、登录拦截器 11.1、创建拦截器类LoginInterceptorpackage com.zcl.interceptor; import com.zcl.utils.SystemConstant; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 判断session是否为空 if(request.getSession().getAttribute(SystemConstant.LOGINUSER) == null){ // 为空就是没有登录,跳转到登录页面 response.sendRedirect(request.getContextPath() + "/admin/login.html"); // 验证失败进行拦截 return false; } // 验证成功 return true; } }11.2、拦截器的注入在springmvc.xml配置文件下注入上面的类
拦截器的测试,启动项目于直接访问home.html页面会查询跳转到登录页面,如果是退出了再回退页面刷新也是会回到登录页面的



