diff --git a/cjscdsjkbpt/pom.xml b/cjscdsjkbpt/pom.xml
index a5446a8..4aff008 100644
--- a/cjscdsjkbpt/pom.xml
+++ b/cjscdsjkbpt/pom.xml
@@ -40,9 +40,14 @@
test
- org.mybatis.spring.boot
- mybatis-spring-boot-starter
- 2.3.1
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.5.12
+
+
+ cn.hutool
+ hutool-all
+ 5.8.8
com.alibaba.fastjson2
diff --git a/cjscdsjkbpt/src/main/java/cn/com/tenlion/AimzProjectApplication.java b/cjscdsjkbpt/src/main/java/cn/com/tenlion/AimzProjectApplication.java
index 27a8703..3fbfa6f 100644
--- a/cjscdsjkbpt/src/main/java/cn/com/tenlion/AimzProjectApplication.java
+++ b/cjscdsjkbpt/src/main/java/cn/com/tenlion/AimzProjectApplication.java
@@ -13,7 +13,7 @@ import java.util.HashMap;
import java.util.Map;
@SpringBootApplication(scanBasePackages = {"cn.com.tenlion"})
-@MapperScan("cn.com.tenlion.mapper")
+@MapperScan("cn.com.tenlion.**.mapper")
public class AimzProjectApplication {
public static void main(String[] args) {
diff --git a/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/controller/SignController.java b/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/controller/SignController.java
new file mode 100644
index 0000000..d17fb3b
--- /dev/null
+++ b/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/controller/SignController.java
@@ -0,0 +1,68 @@
+package cn.com.tenlion.auth.controller;
+
+import cn.com.tenlion.auth.entity.LoginUser;
+import cn.com.tenlion.auth.entity.User;
+import cn.com.tenlion.auth.filter.SystemFilter;
+import cn.com.tenlion.auth.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/sign")
+public class SignController {
+
+ @Autowired
+ private UserService userService;
+ @Autowired
+ private HttpServletRequest httpServletRequest;
+ @Autowired
+ private HttpServletResponse httpServletResponse;
+
+ @PostMapping("/signin")
+ public Map signin(@RequestBody LoginUser body) {
+ if (!StringUtils.hasText(body.getUsername())) {
+ return new HashMap() {{
+ put("code", 400);
+ put("msg", "用户名不能为空");
+ }};
+ }
+ if (!StringUtils.hasText(body.getPassword())) {
+ return new HashMap() {{
+ put("code", 400);
+ put("msg", "密码不能为空");
+ }};
+ }
+ User user = userService.getByUsername(body.getUsername());
+ if (user == null) {
+ return new HashMap() {{
+ put("code", 400);
+ put("msg", "用户不存在");
+ }};
+ }
+ if (!StringUtils.pathEquals(user.getPassword(), body.getPassword())) {
+ return new HashMap() {{
+ put("code", 400);
+ put("msg", "密码错误");
+ }};
+ }
+ httpServletRequest.getSession().setAttribute(SystemFilter.SESSION_USER, user);
+ return new HashMap() {{
+ put("code", 0);
+ put("msg", "success");
+ }};
+ }
+
+ @GetMapping("signout")
+ public void signout() throws IOException {
+ httpServletRequest.getSession().removeAttribute(SystemFilter.SESSION_USER);
+ httpServletResponse.sendRedirect("/route/login.html");
+ }
+
+}
diff --git a/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/controller/UserController.java b/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/controller/UserController.java
new file mode 100644
index 0000000..3e571a5
--- /dev/null
+++ b/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/controller/UserController.java
@@ -0,0 +1,88 @@
+package cn.com.tenlion.auth.controller;
+
+import cn.com.tenlion.auth.entity.User;
+import cn.com.tenlion.auth.service.UserService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@RestController
+@RequestMapping("/api/user")
+public class UserController {
+
+ @Autowired
+ private UserService userService;
+
+ @PostMapping("save")
+ public Map save(@RequestBody User user) {
+ if (!StringUtils.hasText(user.getUsername())) {
+ return new HashMap() {{
+ put("code", 400);
+ put("msg", "用户名不能为空");
+ }};
+ }
+ if (!StringUtils.hasText(user.getPassword())) {
+ return new HashMap() {{
+ put("code", 400);
+ put("msg", "密码不能为空");
+ }};
+ }
+ User byUsername = userService.getByUsername(user.getUsername());
+ if (byUsername != null) {
+ return new HashMap() {{
+ put("code", 400);
+ put("msg", "用户已存在");
+ }};
+ }
+ userService.save(user);
+ return new HashMap() {{
+ put("code", 0);
+ put("msg", "success");
+ }};
+ }
+
+ @PutMapping("update/{userId}")
+ public Map update(@PathVariable("userId") Long userId, @RequestBody User user) {
+ if (!StringUtils.hasText(user.getUsername())) {
+ return new HashMap() {{
+ put("code", 400);
+ put("msg", "用户名不能为空");
+ }};
+ }
+ if (!StringUtils.hasText(user.getPassword())) {
+ return new HashMap() {{
+ put("code", 400);
+ put("msg", "密码不能为空");
+ }};
+ }
+ User byUsername = userService.getByUsername(user.getUsername());
+ if (byUsername != null && userId == byUsername.getId()) {
+ return new HashMap() {{
+ put("code", 400);
+ put("msg", "用户已存在");
+ }};
+ }
+ user.setId(userId);
+ userService.updateById(user);
+ return new HashMap() {{
+ put("code", 0);
+ put("msg", "success");
+ }};
+ }
+
+ @GetMapping("get/{userId}")
+ public User get(@PathVariable("userId") Long userId) {
+ return userService.getById(userId);
+ }
+
+ @GetMapping("list")
+ public List list() {
+ return userService.list(new QueryWrapper<>()).stream().peek(user -> user.setPassword(null)).collect(Collectors.toList());
+ }
+}
diff --git a/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/entity/LoginUser.java b/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/entity/LoginUser.java
new file mode 100644
index 0000000..a44f3b8
--- /dev/null
+++ b/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/entity/LoginUser.java
@@ -0,0 +1,23 @@
+package cn.com.tenlion.auth.entity;
+
+public class LoginUser {
+
+ private String username;
+ private String password;
+
+ public String getUsername() {
+ return username == null ? "" : username.trim();
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password == null ? "" : password.trim();
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+}
diff --git a/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/entity/User.java b/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/entity/User.java
new file mode 100644
index 0000000..140f4c5
--- /dev/null
+++ b/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/entity/User.java
@@ -0,0 +1,81 @@
+package cn.com.tenlion.auth.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+@TableName("SYS_USER")
+public class User {
+
+ @TableId(value = "ID", type = IdType.AUTO)
+ private Long id;
+ @TableField(value = "USERNAME")
+ private String username;
+ @TableField(value = "PASSWORD")
+ private String password;
+ @TableField(value = "NICKNAME")
+ private String nickname;
+ @TableField(value = "EMAIL")
+ private String email;
+ @TableField(value = "PHONE")
+ private String phone;
+ @TableField(value = "GMT_CREATE")
+ private String gmtCreate;
+
+ public Long getId() {
+ return id == null ? 0 : id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUsername() {
+ return username == null ? "" : username.trim();
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password == null ? "" : password.trim();
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getNickname() {
+ return nickname == null ? "" : nickname.trim();
+ }
+
+ public void setNickname(String nickname) {
+ this.nickname = nickname;
+ }
+
+ public String getEmail() {
+ return email == null ? "" : email.trim();
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getPhone() {
+ return phone == null ? "" : phone.trim();
+ }
+
+ public void setPhone(String phone) {
+ this.phone = phone;
+ }
+
+ public String getGmtCreate() {
+ return gmtCreate == null ? "" : gmtCreate.trim();
+ }
+
+ public void setGmtCreate(String gmtCreate) {
+ this.gmtCreate = gmtCreate;
+ }
+}
diff --git a/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/filter/SystemFilter.java b/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/filter/SystemFilter.java
new file mode 100644
index 0000000..6a7955d
--- /dev/null
+++ b/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/filter/SystemFilter.java
@@ -0,0 +1,27 @@
+package cn.com.tenlion.auth.filter;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.IOException;
+
+public class SystemFilter implements Filter {
+
+ public static final String SESSION_USER = "SESSION_USER";
+
+ @Override
+ public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+ HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
+ HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
+
+ HttpSession session = httpServletRequest.getSession();
+ Object sessionUser = session.getAttribute(SESSION_USER);
+ if (sessionUser == null) {
+ httpServletResponse.sendRedirect("/route/login.html");
+ return;
+ }
+ filterChain.doFilter(servletRequest, servletResponse);
+ }
+
+}
diff --git a/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/init/AppAuthStart.java b/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/init/AppAuthStart.java
new file mode 100644
index 0000000..be214f0
--- /dev/null
+++ b/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/init/AppAuthStart.java
@@ -0,0 +1,56 @@
+package cn.com.tenlion.auth.init;
+
+import cn.com.tenlion.auth.entity.User;
+import cn.com.tenlion.auth.mapper.IUserMapper;
+import cn.com.tenlion.auth.service.UserService;
+import cn.com.tenlion.mapper.IAppMapper;
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
+@Component
+public class AppAuthStart implements ApplicationRunner {
+ private static final Logger LOG = LoggerFactory.getLogger(AppAuthStart.class);
+
+ @Autowired
+ private IAppMapper appMapper;
+ @Autowired
+ private IUserMapper userMapper;
+
+ @Override
+ public void run(ApplicationArguments args) throws Exception {
+ String checkTableName = appMapper.checkTableExists("SYS_USER");
+ if (!StringUtils.hasText(checkTableName)) {
+ LOG.debug("用户表不存在");
+ appMapper.updateSql("CREATE TABLE `SYS_USER` (\n" +
+ "`ID` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,\n" +
+ "`USERNAME` varchar(255) DEFAULT NULL COMMENT '用户名',\n" +
+ "`PASSWORD` varchar(255) DEFAULT NULL COMMENT '密码',\n" +
+ "`NICKNAME` varchar(255) DEFAULT NULL COMMENT '昵称',\n" +
+ "`EMAIL` varchar(255) DEFAULT NULL COMMENT '邮箱',\n" +
+ "`PHONE` varchar(255) DEFAULT NULL COMMENT '手机号',\n" +
+ "`GMT_CREATE` varchar(255) DEFAULT NULL COMMENT '创建时间'\n" +
+ ");");
+ }
+ Long userCount = userMapper.selectCount(new QueryWrapper<>());
+ if (userCount == 0) {
+ LOG.debug("用户表为空");
+ User user = new User();
+ user.setUsername("admin");
+ user.setPassword("123456");
+ user.setNickname("管理员");
+ user.setPhone("12345678910");
+ user.setEmail("admin@tenlion.cn");
+ user.setGmtCreate(DateUtil.now());
+ userMapper.insert(user);
+ }
+ }
+
+
+}
diff --git a/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/mapper/IUserMapper.java b/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/mapper/IUserMapper.java
new file mode 100644
index 0000000..fcb1492
--- /dev/null
+++ b/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/mapper/IUserMapper.java
@@ -0,0 +1,9 @@
+package cn.com.tenlion.auth.mapper;
+
+import cn.com.tenlion.auth.entity.User;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface IUserMapper extends BaseMapper {
+}
diff --git a/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/service/UserService.java b/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/service/UserService.java
new file mode 100644
index 0000000..7ebc0a1
--- /dev/null
+++ b/cjscdsjkbpt/src/main/java/cn/com/tenlion/auth/service/UserService.java
@@ -0,0 +1,16 @@
+package cn.com.tenlion.auth.service;
+
+import cn.com.tenlion.auth.entity.User;
+import cn.com.tenlion.auth.mapper.IUserMapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UserService extends ServiceImpl {
+
+ public User getByUsername(String username) {
+ return getOne(new QueryWrapper().eq("USERNAME", username));
+ }
+
+}
diff --git a/cjscdsjkbpt/src/main/java/cn/com/tenlion/config/WebConfig.java b/cjscdsjkbpt/src/main/java/cn/com/tenlion/config/WebConfig.java
index 0c98b5e..5acee1a 100644
--- a/cjscdsjkbpt/src/main/java/cn/com/tenlion/config/WebConfig.java
+++ b/cjscdsjkbpt/src/main/java/cn/com/tenlion/config/WebConfig.java
@@ -1,5 +1,8 @@
package cn.com.tenlion.config;
+import cn.com.tenlion.auth.filter.SystemFilter;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@@ -19,4 +22,14 @@ public class WebConfig implements WebMvcConfigurer {
registry.addViewController("/").setViewName("forward:/route/login.html");
}
+ @Bean
+ public FilterRegistrationBean systemFilter() {
+ FilterRegistrationBean registration = new FilterRegistrationBean<>();
+ registration.setFilter(new SystemFilter());
+ registration.addUrlPatterns("/route/pages/*","/api/*");
+ registration.setName("systemFilter");
+ registration.setOrder(1);
+ return registration;
+ }
+
}
diff --git a/cjscdsjkbpt/src/main/resources/static/route/login.html b/cjscdsjkbpt/src/main/resources/static/route/login.html
index 3c65970..293a236 100644
--- a/cjscdsjkbpt/src/main/resources/static/route/login.html
+++ b/cjscdsjkbpt/src/main/resources/static/route/login.html
@@ -47,7 +47,7 @@
-
+
@@ -62,14 +62,55 @@
+
+
+
+
-
+、
+
diff --git a/cjscdsjkbpt/src/main/resources/static/route/pages/index.html b/cjscdsjkbpt/src/main/resources/static/route/pages/index.html
index ade5b0b..bec722d 100644
--- a/cjscdsjkbpt/src/main/resources/static/route/pages/index.html
+++ b/cjscdsjkbpt/src/main/resources/static/route/pages/index.html
@@ -416,7 +416,7 @@
@@ -808,6 +808,10 @@
homepage.style.display = 'none';
});
+ $('#signoutBtn').click(function() {
+ window.open('sign/signout', '_self')
+ })
+
});
diff --git a/cjscdsjkbpt/src/main/resources/static/route/pages/user/list.html b/cjscdsjkbpt/src/main/resources/static/route/pages/user/list.html
new file mode 100644
index 0000000..af2a6f6
--- /dev/null
+++ b/cjscdsjkbpt/src/main/resources/static/route/pages/user/list.html
@@ -0,0 +1,221 @@
+
+
+