From 33603e3e3ff0581b5cc1f9cf026ae63701acd47e Mon Sep 17 00:00:00 2001
From: pig <2634968536@qq.com>
Date: Thu, 30 Nov 2023 12:40:48 +0800
Subject: [PATCH] finish auth
---
.gitignore | 33 +++++
pom.xml | 115 ++++++++++++++++
.../ecnu/stu/bookstore/BookstoreApplication.java | 13 ++
.../ecnu/stu/bookstore/component/AppException.java | 28 ++++
.../ecnu/stu/bookstore/component/Constants.java | 18 +++
.../edu/ecnu/stu/bookstore/component/Result.java | 46 +++++++
.../edu/ecnu/stu/bookstore/config/RedisConfig.java | 31 +++++
.../ecnu/stu/bookstore/config/SecurityConfig.java | 51 +++++++
.../stu/bookstore/controller/AuthController.java | 54 ++++++++
.../stu/bookstore/controller/TestController.java | 15 +++
.../stu/bookstore/filter/AuthenticationFilter.java | 46 +++++++
.../handler/AuthenticationEntryPointImpl.java | 22 +++
.../bookstore/handler/GlobalExceptionHandler.java | 24 ++++
.../edu/ecnu/stu/bookstore/mapper/UserMapper.java | 28 ++++
.../cn/edu/ecnu/stu/bookstore/pojo/LoginUser.java | 53 ++++++++
.../java/cn/edu/ecnu/stu/bookstore/pojo/User.java | 23 ++++
.../bookstore/service/UserDetailsServiceImpl.java | 26 ++++
.../ecnu/stu/bookstore/service/UserService.java | 83 ++++++++++++
.../cn/edu/ecnu/stu/bookstore/utils/JwtUtil.java | 50 +++++++
.../edu/ecnu/stu/bookstore/utils/RequestUtil.java | 103 ++++++++++++++
src/main/resources/application.yml | 18 +++
src/main/resources/mapper/UserMapper.xml | 22 +++
.../stu/bookstore/BookstoreApplicationTests.java | 28 ++++
.../cn/edu/ecnu/stu/bookstore/RegisterTest.java | 150 +++++++++++++++++++++
24 files changed, 1080 insertions(+)
create mode 100644 .gitignore
create mode 100644 pom.xml
create mode 100644 src/main/java/cn/edu/ecnu/stu/bookstore/BookstoreApplication.java
create mode 100644 src/main/java/cn/edu/ecnu/stu/bookstore/component/AppException.java
create mode 100644 src/main/java/cn/edu/ecnu/stu/bookstore/component/Constants.java
create mode 100644 src/main/java/cn/edu/ecnu/stu/bookstore/component/Result.java
create mode 100644 src/main/java/cn/edu/ecnu/stu/bookstore/config/RedisConfig.java
create mode 100644 src/main/java/cn/edu/ecnu/stu/bookstore/config/SecurityConfig.java
create mode 100644 src/main/java/cn/edu/ecnu/stu/bookstore/controller/AuthController.java
create mode 100644 src/main/java/cn/edu/ecnu/stu/bookstore/controller/TestController.java
create mode 100644 src/main/java/cn/edu/ecnu/stu/bookstore/filter/AuthenticationFilter.java
create mode 100644 src/main/java/cn/edu/ecnu/stu/bookstore/handler/AuthenticationEntryPointImpl.java
create mode 100644 src/main/java/cn/edu/ecnu/stu/bookstore/handler/GlobalExceptionHandler.java
create mode 100644 src/main/java/cn/edu/ecnu/stu/bookstore/mapper/UserMapper.java
create mode 100644 src/main/java/cn/edu/ecnu/stu/bookstore/pojo/LoginUser.java
create mode 100644 src/main/java/cn/edu/ecnu/stu/bookstore/pojo/User.java
create mode 100644 src/main/java/cn/edu/ecnu/stu/bookstore/service/UserDetailsServiceImpl.java
create mode 100644 src/main/java/cn/edu/ecnu/stu/bookstore/service/UserService.java
create mode 100644 src/main/java/cn/edu/ecnu/stu/bookstore/utils/JwtUtil.java
create mode 100644 src/main/java/cn/edu/ecnu/stu/bookstore/utils/RequestUtil.java
create mode 100644 src/main/resources/application.yml
create mode 100644 src/main/resources/mapper/UserMapper.xml
create mode 100644 src/test/java/cn/edu/ecnu/stu/bookstore/BookstoreApplicationTests.java
create mode 100644 src/test/java/cn/edu/ecnu/stu/bookstore/RegisterTest.java
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..549e00a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..20cdfa9
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,115 @@
+
+
+ 4.0.0
+ cn.edu.ecnu.stu
+ bookstore
+ 0.0.1-SNAPSHOT
+ bookstore
+ bookstore
+
+ 1.8
+ UTF-8
+ UTF-8
+ 2.6.13
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-starter
+ 2.2.2
+
+
+
+ com.mysql
+ mysql-connector-j
+ runtime
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ com.alibaba
+ druid
+ 1.1.9
+
+
+ com.auth0
+ java-jwt
+ 3.4.0
+
+
+ com.alibaba
+ fastjson
+ 1.2.47
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.13
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ 1.8
+ 1.8
+ UTF-8
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot.version}
+
+ cn.edu.ecnu.stu.bookstore.BookstoreApplication
+ true
+
+
+
+ repackage
+
+ repackage
+
+
+
+
+
+
+
+
diff --git a/src/main/java/cn/edu/ecnu/stu/bookstore/BookstoreApplication.java b/src/main/java/cn/edu/ecnu/stu/bookstore/BookstoreApplication.java
new file mode 100644
index 0000000..395bddf
--- /dev/null
+++ b/src/main/java/cn/edu/ecnu/stu/bookstore/BookstoreApplication.java
@@ -0,0 +1,13 @@
+package cn.edu.ecnu.stu.bookstore;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class BookstoreApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(BookstoreApplication.class, args);
+ }
+
+}
diff --git a/src/main/java/cn/edu/ecnu/stu/bookstore/component/AppException.java b/src/main/java/cn/edu/ecnu/stu/bookstore/component/AppException.java
new file mode 100644
index 0000000..10324e5
--- /dev/null
+++ b/src/main/java/cn/edu/ecnu/stu/bookstore/component/AppException.java
@@ -0,0 +1,28 @@
+package cn.edu.ecnu.stu.bookstore.component;
+
+import lombok.AllArgsConstructor;
+
+@AllArgsConstructor
+public class AppException extends RuntimeException{
+
+ private String code;
+
+ private String message;
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ @Override
+ public String getMessage() {
+ return message;
+ }
+}
diff --git a/src/main/java/cn/edu/ecnu/stu/bookstore/component/Constants.java b/src/main/java/cn/edu/ecnu/stu/bookstore/component/Constants.java
new file mode 100644
index 0000000..ac2014c
--- /dev/null
+++ b/src/main/java/cn/edu/ecnu/stu/bookstore/component/Constants.java
@@ -0,0 +1,18 @@
+package cn.edu.ecnu.stu.bookstore.component;
+
+public interface Constants {
+
+ String SYSTEM_ERROR = "500";
+ String CLIENT_ERROR = "400";
+ String SUCCESS = "200";
+ String AUTHENTICATION_ERROR = "401";
+ String UNAUTHORIZED_ERROR = "403";
+
+ String REGISTER_ERROR_MESSAGE = "用户名已存在";
+ String PARAMETER_ERROR_MESSAGE = "参数非法";
+ String SUCCESS_MESSAGE = "ok";
+ String AUTHENTICATION_ERROR_MESSAGE = "用户未认证或token过期,请先登录";
+ String PASSWORD_ERROR = "用户名不存在或密码错误";
+
+ String URL_PREFIX = "http://127.0.0.1:8080";
+}
diff --git a/src/main/java/cn/edu/ecnu/stu/bookstore/component/Result.java b/src/main/java/cn/edu/ecnu/stu/bookstore/component/Result.java
new file mode 100644
index 0000000..bdee5e1
--- /dev/null
+++ b/src/main/java/cn/edu/ecnu/stu/bookstore/component/Result.java
@@ -0,0 +1,46 @@
+package cn.edu.ecnu.stu.bookstore.component;
+
+import lombok.Data;
+
+@Data
+public class Result {
+
+ private Object data;
+
+ private String message;
+
+ private String code;
+
+ public Result(String code, String message, Object data) {
+ this.code = code;
+ this.message = message;
+ this.data = data;
+ }
+
+ @Override
+ public String toString() {
+ return "Result{" +
+ "data=" + data +
+ ", message='" + message + '\'' +
+ ", code='" + code + '\'' +
+ '}';
+ }
+
+ public static Result success(Object data) {
+ return new Result(Constants.SUCCESS, "ok", data);
+ }
+
+ public static Result error(String code, String message) {
+ return new Result(code, message, null);
+ }
+
+ public static Result error(String code, String message, Object data) {
+ return new Result(code, message, data);
+ }
+
+ public static Result success() {
+ return new Result(Constants.SUCCESS, Constants.SUCCESS_MESSAGE, null);
+ }
+
+
+}
diff --git a/src/main/java/cn/edu/ecnu/stu/bookstore/config/RedisConfig.java b/src/main/java/cn/edu/ecnu/stu/bookstore/config/RedisConfig.java
new file mode 100644
index 0000000..23d7b7d
--- /dev/null
+++ b/src/main/java/cn/edu/ecnu/stu/bookstore/config/RedisConfig.java
@@ -0,0 +1,31 @@
+package cn.edu.ecnu.stu.bookstore.config;
+
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+@Configuration
+public class RedisConfig implements InitializingBean {
+
+ @Autowired
+ private RedisTemplate