Pārlūkot izejas kodu

feat: 完成登录功能

weijianghai 2 gadi atpakaļ
vecāks
revīzija
5269b80d46

+ 10 - 1
src/main/java/com/nokia/hb/Controller/TemplateController.java

@@ -3,18 +3,27 @@ package com.nokia.hb.Controller;
 import com.nokia.hb.Pojo.RetData;
 import com.nokia.hb.Pojo.TreeNode;
 import com.nokia.hb.utils.DbUtil;
-import java.util.List;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 
+import javax.servlet.http.HttpSession;
 import java.util.List;
 
 @Controller
 @RequestMapping("/")
 public class TemplateController {
+    /**
+     * 用户登录
+     */
+    @PostMapping("userLogin")
+    @ResponseBody
+    public Object userLogin(String username, String password, HttpSession session) {
+        return DbUtil.userLogin(username, password, session);
+    }
+
     @GetMapping("initTreeCitys")
     @ResponseBody
     public List<TreeNode> initTreeCitys() {

+ 10 - 1
src/main/java/com/nokia/hb/Controller/ViewController.java

@@ -3,7 +3,6 @@ package com.nokia.hb.Controller;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
 @Controller
@@ -16,6 +15,16 @@ public class ViewController {
 //        return model;
 //    }
 
+    /**
+     * 登录页面
+     */
+    @GetMapping("login")
+    public ModelAndView  login()
+    {
+        ModelAndView model = new ModelAndView("login");
+        return model;
+    }
+
     @GetMapping("template")
     public ModelAndView  template()
     {

+ 29 - 0
src/main/java/com/nokia/hb/config/LoginHandlerInterceptor.java

@@ -0,0 +1,29 @@
+package com.nokia.hb.config;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+/**
+ * 登录拦截器
+ */
+public class LoginHandlerInterceptor implements HandlerInterceptor {
+    private static final Logger log= LoggerFactory.getLogger(LoginHandlerInterceptor.class);
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        HttpSession session = request.getSession();
+        Object username = session.getAttribute("username");
+        log.debug("username: {}", username);
+        if (username == null) {
+            response.sendRedirect("/login");
+            return false;
+        }
+
+        return true;
+    }
+}

+ 19 - 0
src/main/java/com/nokia/hb/config/MyWebMvcConfigurer.java

@@ -0,0 +1,19 @@
+package com.nokia.hb.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class MyWebMvcConfigurer implements WebMvcConfigurer {
+    /**
+     * 注册拦截器
+     */
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        InterceptorRegistration ir = registry.addInterceptor(new LoginHandlerInterceptor());
+        ir.addPathPatterns("/**");
+        ir.excludePathPatterns("/login", "/userLogin", "/js/**", "/html/**", "/image/**", "/css/**");
+    }
+}

+ 40 - 2
src/main/java/com/nokia/hb/utils/DbUtil.java

@@ -1,14 +1,22 @@
 package com.nokia.hb.utils;
 
 import com.nokia.hb.Pojo.Col;
-import com.nokia.hb.Pojo.TreeNode;
 import com.nokia.hb.Pojo.RetData;
+import com.nokia.hb.Pojo.TreeNode;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.DigestUtils;
 
+import javax.servlet.http.HttpSession;
 import java.sql.*;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 
 public class DbUtil {
+    private static final Logger log= LoggerFactory.getLogger(DbUtil.class);
     private static Connection conn = null;
 
 
@@ -516,6 +524,36 @@ public class DbUtil {
         return sb.toString();
     }
 
+    public static Object userLogin(String username, String password, HttpSession session) {
+        String passwordMd5 = DigestUtils.md5DigestAsHex(password.getBytes());
+        log.debug("username: {}, password: {}, passwordMd5: {}", username, password, passwordMd5);
+        String sql = "select * from pm_parse.user where username='" + username + "'";
+        PreparedStatement psmt = null;
+        try {
+            psmt = conn.prepareStatement(sql);
+            psmt.setQueryTimeout(60 * 10);
+            ResultSet rs = psmt.executeQuery();
+            // 没有查到数据
+            if (!rs.next()) {
+                return 0;
+            }
+
+            String passwordStore = rs.getString("password");
+            log.debug("passwordStore: {}", passwordStore);
+            // 密码正确
+            if (passwordMd5.equals(passwordStore)) {
+                session.setMaxInactiveInterval(30*60);
+                session.setAttribute("username", username);
+                return 1;
+            }
+
+            return 0;
+        } catch (SQLException e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
 
 //    public static List<String> initCitys(String type, String province) {
 //        PreparedStatement psmt = null;

+ 4 - 1
src/main/resources/application.yml

@@ -13,4 +13,7 @@ spring:
     cache: false
     encoding: UTF-8
     servlet:
-      content-type: text/html
+      content-type: text/html
+logging:
+  level:
+    com.nokia.hb: debug

+ 12 - 0
src/main/resources/logback-spring.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <Pattern>%d %highlight(%-5level) %blue(%logger:%line) %msg%n</Pattern>
+        </encoder>
+    </appender>
+
+    <root level="INFO">
+        <appender-ref ref="STDOUT"/>
+    </root>
+</configuration>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
src/main/resources/static/js/layui/css/modules/admin.css


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
src/main/resources/static/js/layui/css/modules/login.css


+ 76 - 0
src/main/resources/templates/login.html

@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>登录</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+          content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="./js/layui/css/layui.css">
+    <link rel="stylesheet" href="./js/layui/css/modules/admin.css">
+    <link rel="stylesheet" href="./js/layui/css/modules/login.css">
+</head>
+<body>
+<div class="layadmin-user-login layadmin-user-display-show" id="LAY-user-login" style="display: none;">
+    <div class="layadmin-user-login-main">
+        <div class="layadmin-user-login-box layadmin-user-login-header">
+            <h2>登录</h2>
+        </div>
+        <div class="layadmin-user-login-box layadmin-user-login-body layui-form">
+            <form class="layui-form layui-form-pane" action="">
+                <div class="layui-form-item">
+                    <label class="layadmin-user-login-icon layui-icon layui-icon-username"
+                           for="LAY-user-login-username"></label>
+                    <input type="text" name="username" id="LAY-user-login-username" lay-verify="required"
+                           placeholder="用户名" class="layui-input">
+                </div>
+                <div class="layui-form-item">
+                    <label class="layadmin-user-login-icon layui-icon layui-icon-password"
+                           for="LAY-user-login-password"></label>
+                    <input type="password" name="password" id="LAY-user-login-password" lay-verify="required"
+                           placeholder="密码" class="layui-input">
+                </div>
+                <div class="layui-form-item">
+                    <button class="layui-btn layui-btn-fluid" lay-submit lay-filter="formData">登 录</button>
+                </div>
+            </form>
+        </div>
+    </div>
+</div>
+<script src="./js/jquery-3.5.1.min.js"></script>
+<script src="./js/layui/layui.js"></script>
+<script>
+    layui.use('form', function () {
+        const form = layui.form;
+
+        //监听提交
+        form.on('submit(formData)', function (data) {
+            const username = data.field.username;
+            const password = data.field.password;
+            $.ajax({
+                type: "POST",
+                url: './userLogin',
+                async: false,
+                data: {
+                    "username": username,
+                    "password": password,
+                },
+                success: function (r) {
+                    console.log(`response: ${JSON.stringify(r)}`)
+
+                    if (r === 1) {
+                        layer.msg('登录成功');
+                        window.location.href = '/template'
+                        return true;
+                    } else {
+                        layer.msg('用户名或密码错误!');
+                    }
+                }
+            });
+            return false;
+        });
+    });
+</script>
+</body>
+</html>

+ 10 - 0
src/test/java/com/nokia/hb/HbApplicationTests.java

@@ -2,9 +2,19 @@ package com.nokia.hb;
 
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.util.DigestUtils;
 
 @SpringBootTest
 class HbApplicationTests {
+	/**
+	 * md5测试
+	 */
+	@Test
+	void md5Test() {
+		String s = "Test!234";
+		String result = DigestUtils.md5DigestAsHex(s.getBytes());
+		System.out.println(result);
+	}
 
 	@Test
 	void contextLoads() {

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels