實現了用戶的登錄和註銷,登錄進去之後就可以對員工的信息進行增刪改查了,使用了攔截器來攔截沒有登陸的用戶進入其他頁面。
項目結構
頁面
登錄頁面:
員工管理頁面:
新增員工:
修改員工信息:
數據庫信息
用戶信息表:
CREATE TABLE `user1` (
`id` int(0) NOT NULL AUTO_INCREMENT,
`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
INSERT INTO `user1` VALUES (1, 'root', '123456');
員工信息表:
CREATE TABLE `employee` (
`id` int(0) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`sex` int(0) NOT NULL,
`position` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`department` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
INSERT INTO `employee` VALUES (1, '小張', 1, '程序媛', '技術部');
INSERT INTO `employee` VALUES (2, '小劉', 0, '部門經理', '技術部');
INSERT INTO `employee` VALUES (3, '老王', 1, '碼農', '技術部');
配置
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lyr</groupId>
<artifactId>springboot-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.5.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.yaml:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: wanide
password: "000000"
mybatis:
type-aliases-package: com.lyr.pojo
mapper-locations: classpath:mapper/*.xml
實體類
User:
package com.lyr.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String username;
private String password;
private Employee employee;
}
Employee:
package com.lyr.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Employee {
private int id;
private String name;
private int sex;
private String position; //職位
private String department; //部門
}
mapper層
UserMapper:
package com.lyr.mapper;
import com.lyr.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface UserMapper {
//根據用戶名獲取用戶信息
User getUserByName(String username);
}
EmployeeMapper:
package com.lyr.mapper;
import com.lyr.pojo.Employee;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface EmpMapper {
//查詢所有員工信息
List<Employee> getAllEmp();
//新增員工信息
int addEmp(Employee employee);
//刪除員工
int deleteEmp(String name);
//更新員工信息
int updateEmp(Employee employee);
//根據員工姓名查詢員工信息
Employee getEmpByName(String name);
}
UserMapper.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lyr.mapper.UserMapper">
<select id="getUserByName" resultType="User">
select * from user1 where username=#{username}
</select>
</mapper>
EmployeeMapper.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lyr.mapper.EmpMapper">
<select id="getAllEmp" resultType="Employee">
select * from employee
</select>
<insert id="addEmp" parameterType="Employee">
insert into employee (name,sex,position,department) values (#{name},#{sex},#{position},#{department})
</insert>
<delete id="deleteEmp" parameterType="String">
delete from employee where name=#{name}
</delete>
<update id="updateEmp" parameterType="Employee">
update employee set name=#{name},sex=#{sex},position=#{position},department=#{department} where id=#{id}
</update>
<select id="getEmpByName" parameterType="String" resultType="Employee">
select * from employee where name=#{name}
</select>
</mapper>
Controller層
UserController類:
package com.lyr.controller;
import com.lyr.pojo.Employee;
import com.lyr.pojo.User;
import com.lyr.service.EmpService;
import com.lyr.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpSession;
import java.util.List;
@Controller
public class UserController {
@Autowired
private UserService userService;
@Autowired
private EmpService empService;
@RequestMapping({"/","/index"})
public String toLogin(){
return "index";
}
@RequestMapping("/login")
public String login(String username, String password, Model model, HttpSession session){
User user = userService.getUserByName(username);
//用戶存在時
if(user!=null){
//用戶名密碼都正確時
if (password.equals(user.getPassword())){
List<Employee> allEmp = empService.getAllEmp();
session.setAttribute("userInfo",username);
return "redirect:/showAll";
}else {
//密碼不正確時
model.addAttribute("msg","用戶名或者密碼錯誤");
return "index";
}
}else {
model.addAttribute("msg","用戶名或者密碼錯誤");
return "index";
}
}
@RequestMapping("/logout")
public String logout(HttpSession session){
//註銷用戶
session.invalidate();
return "index";
}
}
EmpController:
package com.lyr.controller;
import com.lyr.pojo.Employee;
import com.lyr.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpSession;
import java.util.List;
@Controller
public class EmpController {
@Autowired
private EmpService empService;
//查詢員工
@RequestMapping("/queryEmp")
public String showEmployee(String name, Model model){
if(!name.equals("")){
Employee emp = empService.getEmpByName(name);
model.addAttribute("emp",emp);
return "show";
}else {
//輸入爲空時顯示所有用戶
return "redirect:/showAll";
}
}
//查詢所有用戶
@RequestMapping("/showAll")
public String showAll(Model model){
List<Employee> allEmp = empService.getAllEmp();
model.addAttribute("emp",allEmp);
return "show";
}
//新增用戶信息
@RequestMapping("/toAddEmp")
public String toAddEmp(){
return "addEmp";
}
@RequestMapping("/addEmp")
public String addEmp(Employee employee){
empService.addEmp(employee);
return "show";
}
//跳轉到修改用戶信息頁面
@RequestMapping("/toUpdate/{name}")
public String toUpdate(@PathVariable("name")String name,Model model){
Employee emp = empService.getEmpByName(name);
model.addAttribute("emp",emp);
return "updateEmp";
}
//修改員工信息
@RequestMapping("/updateEmp")
public String updateEmp(Employee employee,Model model){
empService.updateEmp(employee);
return "show";
}
//刪除用戶信息
@RequestMapping("/deleteEmp/{name}")
public String deleteEmp(@PathVariable("name")String name){
empService.deleteEmp(name);
return "show";
}
}
攔截器
自定義攔截器userInterceptor:
package com.lyr.config;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class userInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object userInfo = request.getSession().getAttribute("userInfo");
//沒有session信息,也就是沒登陸,不放行
if(userInfo == null){
request.setAttribute("msg","沒有權限,請先登錄");
request.getRequestDispatcher("/").forward(request,response);
return false;
}
return true;
}
}
myMvcConfig類:
package com.lyr.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class myMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//攔截所有頁面除了"/index","/","/login","/css/**","/img/**"
registry.addInterceptor(new userInterceptor()).addPathPatterns("/**")
.excludePathPatterns("/index","/","/login","/css/**","/img/**");
}
}
前端html和service層可以去GitHub查看完整代碼。