From a0ac3f91a116a1a5c52f403010d49f3cd12855f3 Mon Sep 17 00:00:00 2001
From: Bunny <1319900154@qq.com>
Date: Sat, 4 May 2024 11:40:56 +0800
Subject: [PATCH] =?UTF-8?q?:rocket:=20springSecurity=E5=9F=BA=E7=A1=80?=
=?UTF-8?q?=E9=85=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../service/config/MybatisPlusConfig.java | 1 -
common/spring-security/pom.xml | 13 +-
.../security/config/DBUserDetailsManager.java | 52 +
.../security/config/WebSecurityConfig.java | 27 +
.../custom/CustomPasswordEncoder.java | 29 +
.../cn/bunny/security/custom/CustomUser.java | 20 +
.../handelr/SecurityAccessDeniedHandler.java | 24 +
.../SecurityAuthenticationEntryPoint.java | 34 +
.../SecurityAuthenticationFailureHandler.java | 26 +
.../SecurityAuthenticationSuccessHandler.java | 29 +
.../handelr/SecurityLogoutSuccessHandler.java | 26 +
...ritySessionInformationExpiredStrategy.java | 26 +
.../security/service/UserDetailsService.java | 24 +
logs/bunny-service/spring.log | 950 ------------------
logs/bunny-service/spring.log.2024-05-02.0.gz | Bin 1346 -> 0 bytes
.../java/cn/bunny/enums/ResultCodeEnum.java | 5 +
.../service/controller/IndexController.java | 2 +-
17 files changed, 334 insertions(+), 954 deletions(-)
create mode 100644 common/spring-security/src/main/java/cn/bunny/security/config/DBUserDetailsManager.java
create mode 100644 common/spring-security/src/main/java/cn/bunny/security/config/WebSecurityConfig.java
create mode 100644 common/spring-security/src/main/java/cn/bunny/security/custom/CustomPasswordEncoder.java
create mode 100644 common/spring-security/src/main/java/cn/bunny/security/custom/CustomUser.java
create mode 100644 common/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAccessDeniedHandler.java
create mode 100644 common/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAuthenticationEntryPoint.java
create mode 100644 common/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAuthenticationFailureHandler.java
create mode 100644 common/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAuthenticationSuccessHandler.java
create mode 100644 common/spring-security/src/main/java/cn/bunny/security/handelr/SecurityLogoutSuccessHandler.java
create mode 100644 common/spring-security/src/main/java/cn/bunny/security/handelr/SecuritySessionInformationExpiredStrategy.java
create mode 100644 common/spring-security/src/main/java/cn/bunny/security/service/UserDetailsService.java
delete mode 100644 logs/bunny-service/spring.log
delete mode 100644 logs/bunny-service/spring.log.2024-05-02.0.gz
diff --git a/common/service-utils/src/main/java/cn/bunny/common/service/config/MybatisPlusConfig.java b/common/service-utils/src/main/java/cn/bunny/common/service/config/MybatisPlusConfig.java
index 2938898..86bdd5c 100644
--- a/common/service-utils/src/main/java/cn/bunny/common/service/config/MybatisPlusConfig.java
+++ b/common/service-utils/src/main/java/cn/bunny/common/service/config/MybatisPlusConfig.java
@@ -14,7 +14,6 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
* Mybatis-Plus配置类
*/
@EnableTransactionManagement
-// @MapperScan("cn.bunny.service.mapper")
@Configuration
@Slf4j
public class MybatisPlusConfig {
diff --git a/common/spring-security/pom.xml b/common/spring-security/pom.xml
index 48c5390..1e09859 100644
--- a/common/spring-security/pom.xml
+++ b/common/spring-security/pom.xml
@@ -1,4 +1,4 @@
-
4.0.0
@@ -18,6 +18,15 @@
-
+
+ cn.bunny
+ service-utils
+ 0.0.1-SNAPSHOT
+
+
+ cn.bunny
+ service
+ 0.0.1-SNAPSHOT
+
diff --git a/common/spring-security/src/main/java/cn/bunny/security/config/DBUserDetailsManager.java b/common/spring-security/src/main/java/cn/bunny/security/config/DBUserDetailsManager.java
new file mode 100644
index 0000000..75ba303
--- /dev/null
+++ b/common/spring-security/src/main/java/cn/bunny/security/config/DBUserDetailsManager.java
@@ -0,0 +1,52 @@
+package cn.bunny.security.config;
+
+import cn.bunny.entity.system.SysUser;
+import cn.bunny.service.mapper.SysUserMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.core.userdetails.UserDetailsPasswordService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.security.provisioning.UserDetailsManager;
+
+@Configuration
+public class DBUserDetailsManager implements UserDetailsManager, UserDetailsPasswordService {
+ @Autowired
+ private SysUserMapper userMapper;
+
+ @Override
+ public org.springframework.security.core.userdetails.UserDetails updatePassword(org.springframework.security.core.userdetails.UserDetails user, String newPassword) {
+ return null;
+ }
+
+ @Override
+ public void createUser(org.springframework.security.core.userdetails.UserDetails userDetails) {
+ SysUser sysUser = new SysUser();
+ sysUser.setName(userDetails.getUsername());
+ sysUser.setPassword(userDetails.getPassword());
+ }
+
+ @Override
+ public void updateUser(org.springframework.security.core.userdetails.UserDetails user) {
+
+ }
+
+ @Override
+ public void deleteUser(String username) {
+
+ }
+
+ @Override
+ public void changePassword(String oldPassword, String newPassword) {
+
+ }
+
+ @Override
+ public boolean userExists(String username) {
+ return false;
+ }
+
+ @Override
+ public org.springframework.security.core.userdetails.UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+ return null;
+ }
+}
diff --git a/common/spring-security/src/main/java/cn/bunny/security/config/WebSecurityConfig.java b/common/spring-security/src/main/java/cn/bunny/security/config/WebSecurityConfig.java
new file mode 100644
index 0000000..dd58a87
--- /dev/null
+++ b/common/spring-security/src/main/java/cn/bunny/security/config/WebSecurityConfig.java
@@ -0,0 +1,27 @@
+package cn.bunny.security.config;
+
+import cn.bunny.security.custom.CustomPasswordEncoder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.web.SecurityFilterChain;
+
+@Configuration
+@EnableWebSecurity
+@EnableMethodSecurity
+public class WebSecurityConfig {
+ @Autowired
+ private UserDetailsService userDetailsService;
+ @Autowired
+ private CustomPasswordEncoder customPasswordEncoder;
+
+ @Bean
+ public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
+
+ return httpSecurity.build();
+ }
+}
diff --git a/common/spring-security/src/main/java/cn/bunny/security/custom/CustomPasswordEncoder.java b/common/spring-security/src/main/java/cn/bunny/security/custom/CustomPasswordEncoder.java
new file mode 100644
index 0000000..61fddfd
--- /dev/null
+++ b/common/spring-security/src/main/java/cn/bunny/security/custom/CustomPasswordEncoder.java
@@ -0,0 +1,29 @@
+package cn.bunny.security.custom;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.Customizer;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configurers.PasswordManagementConfigurer;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.util.DigestUtils;
+
+/**
+ * 自定义密码加密比对
+ */
+@Configuration
+public class CustomPasswordEncoder implements PasswordEncoder, Customizer> {
+
+ @Override
+ public String encode(CharSequence rawPassword) {
+ return DigestUtils.md5DigestAsHex(rawPassword.toString().getBytes());
+ }
+
+ @Override
+ public boolean matches(CharSequence rawPassword, String encodedPassword) {
+ return encodedPassword.matches(DigestUtils.md5DigestAsHex(rawPassword.toString().getBytes()));
+ }
+
+ @Override
+ public void customize(PasswordManagementConfigurer httpSecurityPasswordManagementConfigurer) {
+ }
+}
diff --git a/common/spring-security/src/main/java/cn/bunny/security/custom/CustomUser.java b/common/spring-security/src/main/java/cn/bunny/security/custom/CustomUser.java
new file mode 100644
index 0000000..35654c9
--- /dev/null
+++ b/common/spring-security/src/main/java/cn/bunny/security/custom/CustomUser.java
@@ -0,0 +1,20 @@
+package cn.bunny.security.custom;
+
+import cn.bunny.entity.system.SysUser;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.User;
+
+import java.util.Collection;
+
+@Getter
+@Setter
+public class CustomUser extends User {
+ private SysUser sysUser;
+
+ public CustomUser(SysUser sysUser, Collection extends GrantedAuthority> authorities) {
+ super(sysUser.getUsername(), sysUser.getPassword(), authorities);
+ this.sysUser = sysUser;
+ }
+}
\ No newline at end of file
diff --git a/common/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAccessDeniedHandler.java b/common/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAccessDeniedHandler.java
new file mode 100644
index 0000000..299d808
--- /dev/null
+++ b/common/spring-security/src/main/java/cn/bunny/security/handelr/SecurityAccessDeniedHandler.java
@@ -0,0 +1,24 @@
+package cn.bunny.security.handelr;
+
+import cn.bunny.common.service.result.Result;
+import cn.bunny.enums.ResultCodeEnum;
+import com.alibaba.fastjson2.JSON;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.AccessDeniedException;
+
+import java.io.IOException;
+
+public class SecurityAccessDeniedHandler implements org.springframework.security.web.access.AccessDeniedHandler {
+ @Override
+ public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {
+ Result