diff --git a/pom.xml b/pom.xml
index fbd18d2..0e9ce0b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,12 +23,10 @@
2.5.0
5.1.3
4.4.0
+ 3.5.6
-
- org.springframework.boot
- spring-boot-starter-data-jpa
-
+
org.springframework.boot
spring-boot-starter-web
@@ -45,6 +43,16 @@
org.springframework.boot
spring-boot-starter-data-redis
+
+
+
+
+
+
+ com.baomidou
+ mybatis-plus-spring-boot3-starter
+ ${mybatis-plus.version}
+
com.mysql
@@ -75,11 +83,11 @@
${commons-lang3.version}
-
- org.springdoc
- springdoc-openapi-starter-webmvc-ui
- ${open-api.version}
-
+
+
+
+
+
redis.clients
@@ -93,6 +101,19 @@
${jwt.version}
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+
+
+
+
+
+
@@ -139,4 +160,11 @@
+
+
+ maven_central
+ Maven Central
+ https://repo.maven.apache.org/maven2/
+
+
diff --git a/src/main/java/com/rainbus/dlp/DlpAdminBackendApplication.java b/src/main/java/com/rainbus/dlp/DlpAdminBackendApplication.java
index 3f5ac42..c1a9aff 100644
--- a/src/main/java/com/rainbus/dlp/DlpAdminBackendApplication.java
+++ b/src/main/java/com/rainbus/dlp/DlpAdminBackendApplication.java
@@ -1,12 +1,12 @@
package com.rainbus.dlp;
+import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
-import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
-@EnableJpaAuditing
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
+@MapperScan("com.rainbus.dlp.repository.mapper")
public class DlpAdminBackendApplication {
public static void main(String[] args) {
diff --git a/src/main/java/com/rainbus/dlp/config/JwtFilter.java b/src/main/java/com/rainbus/dlp/config/JwtFilter.java
index 540670f..e816db9 100644
--- a/src/main/java/com/rainbus/dlp/config/JwtFilter.java
+++ b/src/main/java/com/rainbus/dlp/config/JwtFilter.java
@@ -1,6 +1,5 @@
package com.rainbus.dlp.config;
-import com.rainbus.dlp.entity.dto.user.CustomUserDetails;
import com.rainbus.dlp.entity.dto.user.TokenClaims;
import com.rainbus.dlp.service.UserServ;
import com.rainbus.dlp.util.JwtUtil;
@@ -13,11 +12,9 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.lang.NonNull;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
import org.springframework.stereotype.Component;
@@ -42,10 +39,10 @@ public class JwtFilter extends OncePerRequestFilter {
filterChain.doFilter(request, response);
return;
}
+
TokenClaims claims = JwtUtil.parseValidToken(token);
UserDetails userDetails = userServ.loadUserByUsername(claims.getUsername());
- List authorities = claims.getRoles().stream().map(SimpleGrantedAuthority::new).collect(Collectors.toList());
- UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, authorities);
+ UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authentication);
filterChain.doFilter(request, response);
diff --git a/src/main/java/com/rainbus/dlp/config/MybatisMetaObjectHandler.java b/src/main/java/com/rainbus/dlp/config/MybatisMetaObjectHandler.java
new file mode 100644
index 0000000..79ad839
--- /dev/null
+++ b/src/main/java/com/rainbus/dlp/config/MybatisMetaObjectHandler.java
@@ -0,0 +1,47 @@
+package com.rainbus.dlp.config;
+
+import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import com.rainbus.dlp.entity.dto.user.CustomUserDetails;
+import org.apache.ibatis.reflection.MetaObject;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.core.context.SecurityContextHolder;
+
+import java.time.LocalDateTime;
+
+@Configuration
+public class MybatisMetaObjectHandler implements MetaObjectHandler {
+ @Override
+ public void insertFill(MetaObject metaObject) {
+ if (metaObject.hasSetter("createAt")) {
+ this.fillStrategy(metaObject, "createAt", LocalDateTime.now());
+ }
+ if (metaObject.hasSetter("updateAt")) {
+ this.fillStrategy(metaObject, "updateAt", LocalDateTime.now());
+ }
+ if (metaObject.hasSetter("createBy")) {
+ this.fillStrategy(metaObject, "createBy", this.getCurrentUserId());
+ }
+ if (metaObject.hasSetter("updateBy")) {
+ this.fillStrategy(metaObject, "updateBy", this.getCurrentUserId());
+ }
+ if (metaObject.hasSetter("isDeleted")) {
+ this.fillStrategy(metaObject, "isDeleted", false);
+ }
+ }
+
+ @Override
+ public void updateFill(MetaObject metaObject) {
+ if (metaObject.hasSetter("updateAt")) {
+ this.fillStrategy(metaObject, "updateAt", LocalDateTime.now());
+ }
+ if (metaObject.hasSetter("updateBy")) {
+ this.fillStrategy(metaObject, "updateBy", this.getCurrentUserId());
+ }
+ }
+
+ private Long getCurrentUserId() {
+ CustomUserDetails userDetails = (CustomUserDetails) SecurityContextHolder.getContext().getAuthentication().getDetails();
+ return userDetails.getId();
+ }
+
+}
diff --git a/src/main/java/com/rainbus/dlp/config/SecurityConfig.java b/src/main/java/com/rainbus/dlp/config/SecurityConf.java
similarity index 81%
rename from src/main/java/com/rainbus/dlp/config/SecurityConfig.java
rename to src/main/java/com/rainbus/dlp/config/SecurityConf.java
index bb10c60..da70248 100644
--- a/src/main/java/com/rainbus/dlp/config/SecurityConfig.java
+++ b/src/main/java/com/rainbus/dlp/config/SecurityConf.java
@@ -2,36 +2,29 @@ package com.rainbus.dlp.config;
import com.rainbus.dlp.entity.pojo.user.SysRole;
-import com.rainbus.dlp.repository.user.SysRoleRepo;
import com.rainbus.dlp.service.UserServ;
-import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.authentication.AuthenticationProvider;
-import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
-import org.springframework.security.config.annotation.web.configurers.AuthorizeHttpRequestsConfigurer;
-import org.springframework.security.config.annotation.web.configurers.SessionManagementConfigurer;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
-import org.springframework.web.bind.annotation.RequestMethod;
import java.util.List;
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
-public class SecurityConfig {
+public class SecurityConf {
private final UserServ userServ;
@@ -41,7 +34,7 @@ public class SecurityConfig {
.csrf(AbstractHttpConfigurer::disable)
.sessionManagement(sess -> sess.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests((authorizeHttpRequests) -> {
- userServ.getAllRoles().forEach(role -> {
+ userServ.listRoleResource().forEach(role -> {
role.getResources().forEach(resource -> {
authorizeHttpRequests.requestMatchers(
HttpMethod.valueOf(resource.getRequestMethod().name()),
diff --git a/src/main/java/com/rainbus/dlp/controller/ExceptionCtrl.java b/src/main/java/com/rainbus/dlp/controller/ExceptionCtrl.java
new file mode 100644
index 0000000..ced2fb4
--- /dev/null
+++ b/src/main/java/com/rainbus/dlp/controller/ExceptionCtrl.java
@@ -0,0 +1,16 @@
+package com.rainbus.dlp.controller;
+
+import com.rainbus.dlp.entity.exception.UsernameOrPasswordExcp;
+import com.rainbus.dlp.entity.resp.Resp;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+@RestControllerAdvice
+public class ExceptionCtrl {
+
+ @ExceptionHandler(UsernameOrPasswordExcp.class)
+ public Resp