From 41d384f6261c9a81728d4da85858c07e657488a0 Mon Sep 17 00:00:00 2001 From: dengqichen Date: Tue, 26 Nov 2024 14:51:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8F=AF=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E7=9A=84createtime=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../deploy/backend/api/UserApiController.java | 23 +++--- .../common/annotation/QueryField.java | 4 +- .../common/config/JpaConfig.java | 2 +- .../backend/common/config/SecurityConfig.java | 72 +++++++++++++++++++ .../backend/common/config/WebConfig.java | 18 +++++ .../common/controller/BaseController.java | 14 ++-- .../common/converter/BaseConverter.java | 6 +- .../common/domain/AggregateRoot.java | 2 +- .../{ => backend}/common/domain/Entity.java | 2 +- .../{ => backend}/common/dto/BaseRequest.java | 2 +- .../common/dto/BaseResponse.java | 2 +- .../{ => backend}/common/dto/Response.java | 2 +- .../{ => backend}/common/enums/QueryType.java | 2 +- .../{ => backend}/common/query/BaseQuery.java | 12 ++-- .../{ => backend}/common/query/DateRange.java | 2 +- .../{ => backend}/common/query/Range.java | 2 +- .../common/repository/BaseRepository.java | 4 +- .../common/service/BaseService.java | 6 +- .../common/service/impl/BaseServiceImpl.java | 38 +++++----- .../backend/controller/UserController.java | 2 +- .../backend/converter/UserConverter.java | 2 +- .../backend/dto/query/UserAddressQuery.java | 4 +- .../deploy/backend/dto/query/UserQuery.java | 45 +++++++----- .../backend/dto/request/UserRequest.java | 2 +- .../backend/dto/response/UserResponse.java | 2 +- .../qqchen/deploy/backend/entity/User.java | 2 +- .../backend/repository/UserRepository.java | 2 +- .../deploy/backend/service/UserService.java | 2 +- .../backend/service/impl/UserServiceImpl.java | 2 +- .../deploy/common/config/SecurityConfig.java | 32 --------- backend/src/main/resources/application.yml | 12 +++- 31 files changed, 202 insertions(+), 122 deletions(-) rename backend/src/main/java/com/qqchen/deploy/{ => backend}/common/annotation/QueryField.java (77%) rename backend/src/main/java/com/qqchen/deploy/{ => backend}/common/config/JpaConfig.java (94%) create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/common/config/SecurityConfig.java create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/common/config/WebConfig.java rename backend/src/main/java/com/qqchen/deploy/{ => backend}/common/controller/BaseController.java (81%) rename backend/src/main/java/com/qqchen/deploy/{ => backend}/common/converter/BaseConverter.java (77%) rename backend/src/main/java/com/qqchen/deploy/{ => backend}/common/domain/AggregateRoot.java (79%) rename backend/src/main/java/com/qqchen/deploy/{ => backend}/common/domain/Entity.java (96%) rename backend/src/main/java/com/qqchen/deploy/{ => backend}/common/dto/BaseRequest.java (90%) rename backend/src/main/java/com/qqchen/deploy/{ => backend}/common/dto/BaseResponse.java (87%) rename backend/src/main/java/com/qqchen/deploy/{ => backend}/common/dto/Response.java (96%) rename backend/src/main/java/com/qqchen/deploy/{ => backend}/common/enums/QueryType.java (87%) rename backend/src/main/java/com/qqchen/deploy/{ => backend}/common/query/BaseQuery.java (83%) rename backend/src/main/java/com/qqchen/deploy/{ => backend}/common/query/DateRange.java (95%) rename backend/src/main/java/com/qqchen/deploy/{ => backend}/common/query/Range.java (65%) rename backend/src/main/java/com/qqchen/deploy/{ => backend}/common/repository/BaseRepository.java (89%) rename backend/src/main/java/com/qqchen/deploy/{ => backend}/common/service/BaseService.java (69%) rename backend/src/main/java/com/qqchen/deploy/{ => backend}/common/service/impl/BaseServiceImpl.java (93%) delete mode 100644 backend/src/main/java/com/qqchen/deploy/common/config/SecurityConfig.java diff --git a/backend/src/main/java/com/qqchen/deploy/backend/api/UserApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/api/UserApiController.java index 9bb47a31..6ce76f58 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/api/UserApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/api/UserApiController.java @@ -1,7 +1,7 @@ package com.qqchen.deploy.backend.api; -import com.qqchen.deploy.common.controller.BaseController; -import com.qqchen.deploy.common.dto.Response; +import com.qqchen.deploy.backend.common.controller.BaseController; +import com.qqchen.deploy.backend.common.dto.Response; import com.qqchen.deploy.backend.converter.UserConverter; import com.qqchen.deploy.backend.entity.User; import com.qqchen.deploy.backend.dto.query.UserQuery; @@ -9,7 +9,9 @@ import com.qqchen.deploy.backend.dto.request.UserRequest; import com.qqchen.deploy.backend.dto.response.UserResponse; import com.qqchen.deploy.backend.dto.request.UserRegisterRequest; import com.qqchen.deploy.backend.service.UserService; +import org.springframework.data.domain.Page; import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -18,26 +20,29 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/v1/users") public class UserApiController extends BaseController { - + protected final UserService userService; - + public UserApiController(UserService userService, UserConverter converter) { this.userService = userService; this.converter = converter; } - + @PostMapping("/register") public Response register(@Validated @RequestBody UserRegisterRequest request) { // 基础的注册逻辑 if (!request.getPassword().equals(request.getConfirmPassword())) { return Response.error(Response.INVALID_PARAM_CODE, "两次密码不一致"); } - + User user = converter.toEntity(request); User savedUser = userService.register(user); return Response.success(converter.toVO(savedUser)); } - - // 其他对外API... - // 可以覆盖父类的方法,添加更严格的访问控制或参数校验 + + @GetMapping("/page") + public Response> page(UserQuery query) { + return super.page(query); + } + } \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/common/annotation/QueryField.java b/backend/src/main/java/com/qqchen/deploy/backend/common/annotation/QueryField.java similarity index 77% rename from backend/src/main/java/com/qqchen/deploy/common/annotation/QueryField.java rename to backend/src/main/java/com/qqchen/deploy/backend/common/annotation/QueryField.java index 216a8c35..47c335b0 100644 --- a/backend/src/main/java/com/qqchen/deploy/common/annotation/QueryField.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/common/annotation/QueryField.java @@ -1,6 +1,6 @@ -package com.qqchen.deploy.common.annotation; +package com.qqchen.deploy.backend.common.annotation; -import com.qqchen.deploy.common.enums.QueryType; +import com.qqchen.deploy.backend.common.enums.QueryType; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/backend/src/main/java/com/qqchen/deploy/common/config/JpaConfig.java b/backend/src/main/java/com/qqchen/deploy/backend/common/config/JpaConfig.java similarity index 94% rename from backend/src/main/java/com/qqchen/deploy/common/config/JpaConfig.java rename to backend/src/main/java/com/qqchen/deploy/backend/common/config/JpaConfig.java index f9a152d8..9eecba5e 100644 --- a/backend/src/main/java/com/qqchen/deploy/common/config/JpaConfig.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/common/config/JpaConfig.java @@ -1,4 +1,4 @@ -package com.qqchen.deploy.common.config; +package com.qqchen.deploy.backend.common.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/backend/src/main/java/com/qqchen/deploy/backend/common/config/SecurityConfig.java b/backend/src/main/java/com/qqchen/deploy/backend/common/config/SecurityConfig.java new file mode 100644 index 00000000..fcd16d5a --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/common/config/SecurityConfig.java @@ -0,0 +1,72 @@ +package com.qqchen.deploy.backend.common.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.provisioning.InMemoryUserDetailsManager; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.CorsConfigurationSource; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; + +import java.util.Arrays; + +@Configuration +@EnableWebSecurity +public class SecurityConfig { + + @Bean + public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + http + .cors(cors -> cors.configurationSource(corsConfigurationSource())) + .csrf(csrf -> csrf.disable()) // 禁用CSRF + .sessionManagement(session -> session + .sessionCreationPolicy(SessionCreationPolicy.STATELESS)) // 禁用session + .formLogin(form -> form.disable()) // 禁用form登录 + .httpBasic(basic -> basic.disable()) // 禁用basic认证 + .logout(logout -> logout.disable()) // 禁用logout + .anonymous(anonymous -> {}) // 允许匿名访问 + .authorizeHttpRequests(auth -> auth + // 公开接口 +// .requestMatchers("/api/v1/users/register").permitAll() +// .requestMatchers("/api/v1/users/login").permitAll() +// // Swagger相关接口 +// .requestMatchers("/swagger-ui/**", "/v3/api-docs/**").permitAll() +// // 健康检查接口 +// .requestMatchers("/actuator/**").permitAll() + // 开发阶段可以暂时允许所有请求 + .anyRequest().permitAll() + // 生产环境建议改为需要认证 + //.anyRequest().authenticated() + ); + + return http.build(); + } + + @Bean + public UserDetailsService userDetailsService() { + UserDetails user = User.withUsername("anonymous") + .password("{noop}") + .roles("ANONYMOUS") + .build(); + return new InMemoryUserDetailsManager(user); + } + + @Bean + public CorsConfigurationSource corsConfigurationSource() { + CorsConfiguration configuration = new CorsConfiguration(); + configuration.setAllowedOrigins(Arrays.asList("*")); + configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE", "OPTIONS")); + configuration.setAllowedHeaders(Arrays.asList("*")); + configuration.setMaxAge(3600L); + + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", configuration); + return source; + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/common/config/WebConfig.java b/backend/src/main/java/com/qqchen/deploy/backend/common/config/WebConfig.java new file mode 100644 index 00000000..cbe161e7 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/common/config/WebConfig.java @@ -0,0 +1,18 @@ +package com.qqchen.deploy.backend.common.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins("*") // 允许所有来源 + .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 允许的HTTP方法 + .allowedHeaders("*") // 允许所有header + .maxAge(3600); // 预检请求的有效期,单位为秒 + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/common/controller/BaseController.java b/backend/src/main/java/com/qqchen/deploy/backend/common/controller/BaseController.java similarity index 81% rename from backend/src/main/java/com/qqchen/deploy/common/controller/BaseController.java rename to backend/src/main/java/com/qqchen/deploy/backend/common/controller/BaseController.java index 55f4db6c..35899fdc 100644 --- a/backend/src/main/java/com/qqchen/deploy/common/controller/BaseController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/common/controller/BaseController.java @@ -1,11 +1,11 @@ -package com.qqchen.deploy.common.controller; +package com.qqchen.deploy.backend.common.controller; -import com.qqchen.deploy.common.converter.BaseConverter; -import com.qqchen.deploy.common.domain.Entity; -import com.qqchen.deploy.common.query.BaseQuery; -import com.qqchen.deploy.common.dto.BaseRequest; -import com.qqchen.deploy.common.dto.Response; -import com.qqchen.deploy.common.service.BaseService; +import com.qqchen.deploy.backend.common.domain.Entity; +import com.qqchen.deploy.backend.common.converter.BaseConverter; +import com.qqchen.deploy.backend.common.query.BaseQuery; +import com.qqchen.deploy.backend.common.dto.BaseRequest; +import com.qqchen.deploy.backend.common.dto.Response; +import com.qqchen.deploy.backend.common.service.BaseService; import jakarta.annotation.Resource; import org.springframework.data.domain.Page; import org.springframework.web.bind.annotation.*; diff --git a/backend/src/main/java/com/qqchen/deploy/common/converter/BaseConverter.java b/backend/src/main/java/com/qqchen/deploy/backend/common/converter/BaseConverter.java similarity index 77% rename from backend/src/main/java/com/qqchen/deploy/common/converter/BaseConverter.java rename to backend/src/main/java/com/qqchen/deploy/backend/common/converter/BaseConverter.java index 1c4f9273..959d4f67 100644 --- a/backend/src/main/java/com/qqchen/deploy/common/converter/BaseConverter.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/common/converter/BaseConverter.java @@ -1,7 +1,7 @@ -package com.qqchen.deploy.common.converter; +package com.qqchen.deploy.backend.common.converter; -import com.qqchen.deploy.common.domain.Entity; -import com.qqchen.deploy.common.dto.BaseRequest; +import com.qqchen.deploy.backend.common.domain.Entity; +import com.qqchen.deploy.backend.common.dto.BaseRequest; import org.mapstruct.MappingTarget; import org.springframework.data.domain.Page; diff --git a/backend/src/main/java/com/qqchen/deploy/common/domain/AggregateRoot.java b/backend/src/main/java/com/qqchen/deploy/backend/common/domain/AggregateRoot.java similarity index 79% rename from backend/src/main/java/com/qqchen/deploy/common/domain/AggregateRoot.java rename to backend/src/main/java/com/qqchen/deploy/backend/common/domain/AggregateRoot.java index 967dc173..b8e65d17 100644 --- a/backend/src/main/java/com/qqchen/deploy/common/domain/AggregateRoot.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/common/domain/AggregateRoot.java @@ -1,4 +1,4 @@ -package com.qqchen.deploy.common.domain; +package com.qqchen.deploy.backend.common.domain; import java.io.Serializable; diff --git a/backend/src/main/java/com/qqchen/deploy/common/domain/Entity.java b/backend/src/main/java/com/qqchen/deploy/backend/common/domain/Entity.java similarity index 96% rename from backend/src/main/java/com/qqchen/deploy/common/domain/Entity.java rename to backend/src/main/java/com/qqchen/deploy/backend/common/domain/Entity.java index f36352f3..b53eec56 100644 --- a/backend/src/main/java/com/qqchen/deploy/common/domain/Entity.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/common/domain/Entity.java @@ -1,4 +1,4 @@ -package com.qqchen.deploy.common.domain; +package com.qqchen.deploy.backend.common.domain; import jakarta.persistence.Column; import jakarta.persistence.EntityListeners; diff --git a/backend/src/main/java/com/qqchen/deploy/common/dto/BaseRequest.java b/backend/src/main/java/com/qqchen/deploy/backend/common/dto/BaseRequest.java similarity index 90% rename from backend/src/main/java/com/qqchen/deploy/common/dto/BaseRequest.java rename to backend/src/main/java/com/qqchen/deploy/backend/common/dto/BaseRequest.java index 6c7c3114..748ca356 100644 --- a/backend/src/main/java/com/qqchen/deploy/common/dto/BaseRequest.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/common/dto/BaseRequest.java @@ -1,4 +1,4 @@ -package com.qqchen.deploy.common.dto; +package com.qqchen.deploy.backend.common.dto; import lombok.Data; diff --git a/backend/src/main/java/com/qqchen/deploy/common/dto/BaseResponse.java b/backend/src/main/java/com/qqchen/deploy/backend/common/dto/BaseResponse.java similarity index 87% rename from backend/src/main/java/com/qqchen/deploy/common/dto/BaseResponse.java rename to backend/src/main/java/com/qqchen/deploy/backend/common/dto/BaseResponse.java index cc305a55..be799ffc 100644 --- a/backend/src/main/java/com/qqchen/deploy/common/dto/BaseResponse.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/common/dto/BaseResponse.java @@ -1,4 +1,4 @@ -package com.qqchen.deploy.common.dto; +package com.qqchen.deploy.backend.common.dto; import lombok.Data; diff --git a/backend/src/main/java/com/qqchen/deploy/common/dto/Response.java b/backend/src/main/java/com/qqchen/deploy/backend/common/dto/Response.java similarity index 96% rename from backend/src/main/java/com/qqchen/deploy/common/dto/Response.java rename to backend/src/main/java/com/qqchen/deploy/backend/common/dto/Response.java index d301551b..4c4065ad 100644 --- a/backend/src/main/java/com/qqchen/deploy/common/dto/Response.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/common/dto/Response.java @@ -1,4 +1,4 @@ -package com.qqchen.deploy.common.dto; +package com.qqchen.deploy.backend.common.dto; import lombok.Data; diff --git a/backend/src/main/java/com/qqchen/deploy/common/enums/QueryType.java b/backend/src/main/java/com/qqchen/deploy/backend/common/enums/QueryType.java similarity index 87% rename from backend/src/main/java/com/qqchen/deploy/common/enums/QueryType.java rename to backend/src/main/java/com/qqchen/deploy/backend/common/enums/QueryType.java index 351cf62e..b22b8225 100644 --- a/backend/src/main/java/com/qqchen/deploy/common/enums/QueryType.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/common/enums/QueryType.java @@ -1,4 +1,4 @@ -package com.qqchen.deploy.common.enums; +package com.qqchen.deploy.backend.common.enums; public enum QueryType { EQUAL, // 等于 diff --git a/backend/src/main/java/com/qqchen/deploy/common/query/BaseQuery.java b/backend/src/main/java/com/qqchen/deploy/backend/common/query/BaseQuery.java similarity index 83% rename from backend/src/main/java/com/qqchen/deploy/common/query/BaseQuery.java rename to backend/src/main/java/com/qqchen/deploy/backend/common/query/BaseQuery.java index 8b5a8b16..8084ec9e 100644 --- a/backend/src/main/java/com/qqchen/deploy/common/query/BaseQuery.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/common/query/BaseQuery.java @@ -1,13 +1,11 @@ -package com.qqchen.deploy.common.query; +package com.qqchen.deploy.backend.common.query; -import com.qqchen.deploy.common.annotation.QueryField; -import com.qqchen.deploy.common.enums.QueryType; -import com.qqchen.deploy.common.query.DateRange; +import com.qqchen.deploy.backend.common.annotation.QueryField; +import com.qqchen.deploy.backend.common.enums.QueryType; import lombok.Data; import java.io.Serializable; import java.time.LocalDateTime; -import java.util.Date; @Data public abstract class BaseQuery implements Serializable { @@ -15,9 +13,9 @@ public abstract class BaseQuery implements Serializable { private Integer pageSize = 10; - private String sortField; + private String sortField = "createTime"; - private String sortOrder; + private String sortOrder = "desc"; // 通用状态查询 @QueryField(field = "enabled") diff --git a/backend/src/main/java/com/qqchen/deploy/common/query/DateRange.java b/backend/src/main/java/com/qqchen/deploy/backend/common/query/DateRange.java similarity index 95% rename from backend/src/main/java/com/qqchen/deploy/common/query/DateRange.java rename to backend/src/main/java/com/qqchen/deploy/backend/common/query/DateRange.java index 02f9f816..f72e8fde 100644 --- a/backend/src/main/java/com/qqchen/deploy/common/query/DateRange.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/common/query/DateRange.java @@ -1,4 +1,4 @@ -package com.qqchen.deploy.common.query; +package com.qqchen.deploy.backend.common.query; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/backend/src/main/java/com/qqchen/deploy/common/query/Range.java b/backend/src/main/java/com/qqchen/deploy/backend/common/query/Range.java similarity index 65% rename from backend/src/main/java/com/qqchen/deploy/common/query/Range.java rename to backend/src/main/java/com/qqchen/deploy/backend/common/query/Range.java index b8d05f33..77355ee9 100644 --- a/backend/src/main/java/com/qqchen/deploy/common/query/Range.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/common/query/Range.java @@ -1,4 +1,4 @@ -package com.qqchen.deploy.common.query; +package com.qqchen.deploy.backend.common.query; import lombok.Data; diff --git a/backend/src/main/java/com/qqchen/deploy/common/repository/BaseRepository.java b/backend/src/main/java/com/qqchen/deploy/backend/common/repository/BaseRepository.java similarity index 89% rename from backend/src/main/java/com/qqchen/deploy/common/repository/BaseRepository.java rename to backend/src/main/java/com/qqchen/deploy/backend/common/repository/BaseRepository.java index 688681be..c264634a 100644 --- a/backend/src/main/java/com/qqchen/deploy/common/repository/BaseRepository.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/common/repository/BaseRepository.java @@ -1,6 +1,6 @@ -package com.qqchen.deploy.common.repository; +package com.qqchen.deploy.backend.common.repository; -import com.qqchen.deploy.common.domain.Entity; +import com.qqchen.deploy.backend.common.domain.Entity; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.querydsl.QuerydslPredicateExecutor; diff --git a/backend/src/main/java/com/qqchen/deploy/common/service/BaseService.java b/backend/src/main/java/com/qqchen/deploy/backend/common/service/BaseService.java similarity index 69% rename from backend/src/main/java/com/qqchen/deploy/common/service/BaseService.java rename to backend/src/main/java/com/qqchen/deploy/backend/common/service/BaseService.java index 78e812fe..4420a415 100644 --- a/backend/src/main/java/com/qqchen/deploy/common/service/BaseService.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/common/service/BaseService.java @@ -1,7 +1,7 @@ -package com.qqchen.deploy.common.service; +package com.qqchen.deploy.backend.common.service; -import com.qqchen.deploy.common.domain.Entity; -import com.qqchen.deploy.common.query.BaseQuery; +import com.qqchen.deploy.backend.common.domain.Entity; +import com.qqchen.deploy.backend.common.query.BaseQuery; import org.springframework.data.domain.Page; import java.io.Serializable; diff --git a/backend/src/main/java/com/qqchen/deploy/common/service/impl/BaseServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/common/service/impl/BaseServiceImpl.java similarity index 93% rename from backend/src/main/java/com/qqchen/deploy/common/service/impl/BaseServiceImpl.java rename to backend/src/main/java/com/qqchen/deploy/backend/common/service/impl/BaseServiceImpl.java index 28253ece..536c2105 100644 --- a/backend/src/main/java/com/qqchen/deploy/common/service/impl/BaseServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/common/service/impl/BaseServiceImpl.java @@ -1,20 +1,18 @@ -package com.qqchen.deploy.common.service.impl; +package com.qqchen.deploy.backend.common.service.impl; import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.time.ZoneId; import java.util.stream.Collectors; import java.util.Collection; import java.util.List; -import com.qqchen.deploy.common.annotation.QueryField; -import com.qqchen.deploy.common.domain.Entity; -import com.qqchen.deploy.common.query.BaseQuery; -import com.qqchen.deploy.common.enums.QueryType; -import com.qqchen.deploy.common.query.DateRange; -import com.qqchen.deploy.common.query.Range; -import com.qqchen.deploy.common.repository.BaseRepository; -import com.qqchen.deploy.common.service.BaseService; +import com.qqchen.deploy.backend.common.domain.Entity; +import com.qqchen.deploy.backend.common.enums.QueryType; +import com.qqchen.deploy.backend.common.query.BaseQuery; +import com.qqchen.deploy.backend.common.query.DateRange; +import com.qqchen.deploy.backend.common.query.Range; +import com.qqchen.deploy.backend.common.repository.BaseRepository; +import com.qqchen.deploy.backend.common.annotation.QueryField; +import com.qqchen.deploy.backend.common.service.BaseService; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.EntityPath; import com.querydsl.core.types.Path; @@ -273,19 +271,22 @@ public abstract class BaseServiceImpl, ID extends Serializa } protected PageRequest createPageRequest(BaseQuery query) { + if (query == null) { + // 如果query为null,使用默认值 + return PageRequest.of(0, 10, Sort.by(Sort.Direction.DESC, "createTime")); + } + + Sort sort = StringUtils.hasText(query.getSortField()) ? + Sort.by(Sort.Direction.fromString(query.getSortOrder()), query.getSortField()) : + Sort.by(Sort.Direction.DESC, "createTime"); + return PageRequest.of( query.getPageNum() - 1, query.getPageSize(), - createSort(query) + sort ); } - protected Sort createSort(BaseQuery query) { - return StringUtils.hasText(query.getSortField()) ? - Sort.by(Sort.Direction.fromString(query.getSortOrder()), query.getSortField()) : - Sort.unsorted(); - } - private Number parseNumber(Object value, Class targetType) { if (value == null) return null; try { @@ -319,4 +320,5 @@ public abstract class BaseServiceImpl, ID extends Serializa } } } + } \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/controller/UserController.java b/backend/src/main/java/com/qqchen/deploy/backend/controller/UserController.java index 6f2870e7..c434ad9e 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/controller/UserController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/controller/UserController.java @@ -1,7 +1,7 @@ package com.qqchen.deploy.backend.controller; import com.qqchen.deploy.backend.api.UserApiController; -import com.qqchen.deploy.common.dto.Response; +import com.qqchen.deploy.backend.common.dto.Response; import com.qqchen.deploy.backend.converter.UserConverter; import com.qqchen.deploy.backend.service.UserService; import org.springframework.web.bind.annotation.GetMapping; diff --git a/backend/src/main/java/com/qqchen/deploy/backend/converter/UserConverter.java b/backend/src/main/java/com/qqchen/deploy/backend/converter/UserConverter.java index cfae5754..f83d51f2 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/converter/UserConverter.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/converter/UserConverter.java @@ -1,6 +1,6 @@ package com.qqchen.deploy.backend.converter; -import com.qqchen.deploy.common.converter.BaseConverter; +import com.qqchen.deploy.backend.common.converter.BaseConverter; import com.qqchen.deploy.backend.entity.User; import com.qqchen.deploy.backend.dto.request.UserRequest; import com.qqchen.deploy.backend.dto.response.UserResponse; diff --git a/backend/src/main/java/com/qqchen/deploy/backend/dto/query/UserAddressQuery.java b/backend/src/main/java/com/qqchen/deploy/backend/dto/query/UserAddressQuery.java index e26e8be7..963138f3 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/dto/query/UserAddressQuery.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/dto/query/UserAddressQuery.java @@ -1,7 +1,7 @@ package com.qqchen.deploy.backend.dto.query; -import com.qqchen.deploy.common.annotation.QueryField; -import com.qqchen.deploy.common.enums.QueryType; +import com.qqchen.deploy.backend.common.annotation.QueryField; +import com.qqchen.deploy.backend.common.enums.QueryType; import lombok.Data; @Data diff --git a/backend/src/main/java/com/qqchen/deploy/backend/dto/query/UserQuery.java b/backend/src/main/java/com/qqchen/deploy/backend/dto/query/UserQuery.java index 9ef59fb9..c8ae95dd 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/dto/query/UserQuery.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/dto/query/UserQuery.java @@ -1,30 +1,41 @@ package com.qqchen.deploy.backend.dto.query; -import com.qqchen.deploy.common.annotation.QueryField; -import com.qqchen.deploy.common.query.BaseQuery; -import com.qqchen.deploy.common.enums.QueryType; -import com.qqchen.deploy.common.query.DateRange; +import com.qqchen.deploy.backend.common.annotation.QueryField; +import com.qqchen.deploy.backend.common.query.BaseQuery; +import com.qqchen.deploy.backend.common.enums.QueryType; import lombok.Data; import lombok.EqualsAndHashCode; -import java.util.List; - @Data @EqualsAndHashCode(callSuper = true) public class UserQuery extends BaseQuery { + @QueryField(type = QueryType.LIKE) private String username; - + @QueryField(type = QueryType.LIKE) private String email; - - @QueryField(type = QueryType.IN) - private List roles; - - @QueryField(type = QueryType.BETWEEN) - private DateRange createTimeRange; - - // 嵌套对象查询 - private UserAddressQuery address; -} + @QueryField(type = QueryType.LIKE) + private String nickname; + + @QueryField(type = QueryType.LIKE) + private String phone; + + @QueryField(type = QueryType.EQUAL) + private Boolean enabled; + + @QueryField(type = QueryType.EQUAL) + private Boolean deleted; + + @QueryField(type = QueryType.LIKE) + private String createBy; + + @QueryField(type = QueryType.LIKE) + private String updateBy; + + @QueryField(type = QueryType.EQUAL) + private Integer version; + + // createTimeRange 和 updateTimeRange 已经在 BaseQuery 中定义 +} diff --git a/backend/src/main/java/com/qqchen/deploy/backend/dto/request/UserRequest.java b/backend/src/main/java/com/qqchen/deploy/backend/dto/request/UserRequest.java index 018dcc88..bf386511 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/dto/request/UserRequest.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/dto/request/UserRequest.java @@ -1,6 +1,6 @@ package com.qqchen.deploy.backend.dto.request; -import com.qqchen.deploy.common.dto.BaseRequest; +import com.qqchen.deploy.backend.common.dto.BaseRequest; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; diff --git a/backend/src/main/java/com/qqchen/deploy/backend/dto/response/UserResponse.java b/backend/src/main/java/com/qqchen/deploy/backend/dto/response/UserResponse.java index e12a8468..adf5dff6 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/dto/response/UserResponse.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/dto/response/UserResponse.java @@ -1,6 +1,6 @@ package com.qqchen.deploy.backend.dto.response; -import com.qqchen.deploy.common.dto.BaseResponse; +import com.qqchen.deploy.backend.common.dto.BaseResponse; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/backend/src/main/java/com/qqchen/deploy/backend/entity/User.java b/backend/src/main/java/com/qqchen/deploy/backend/entity/User.java index 9f96c5c4..fb65b692 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/entity/User.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/entity/User.java @@ -1,6 +1,6 @@ package com.qqchen.deploy.backend.entity; -import com.qqchen.deploy.common.domain.Entity; +import com.qqchen.deploy.backend.common.domain.Entity; import jakarta.persistence.Column; import jakarta.persistence.Table; import lombok.Data; diff --git a/backend/src/main/java/com/qqchen/deploy/backend/repository/UserRepository.java b/backend/src/main/java/com/qqchen/deploy/backend/repository/UserRepository.java index a932de1f..21958088 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/repository/UserRepository.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/repository/UserRepository.java @@ -1,6 +1,6 @@ package com.qqchen.deploy.backend.repository; -import com.qqchen.deploy.common.repository.BaseRepository; +import com.qqchen.deploy.backend.common.repository.BaseRepository; import com.qqchen.deploy.backend.entity.User; import org.springframework.stereotype.Repository; diff --git a/backend/src/main/java/com/qqchen/deploy/backend/service/UserService.java b/backend/src/main/java/com/qqchen/deploy/backend/service/UserService.java index 860592df..8ee2391f 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/service/UserService.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/service/UserService.java @@ -1,6 +1,6 @@ package com.qqchen.deploy.backend.service; -import com.qqchen.deploy.common.service.BaseService; +import com.qqchen.deploy.backend.common.service.BaseService; import com.qqchen.deploy.backend.entity.User; public interface UserService extends BaseService { diff --git a/backend/src/main/java/com/qqchen/deploy/backend/service/impl/UserServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/service/impl/UserServiceImpl.java index 0a41fed0..88f54320 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/service/impl/UserServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/service/impl/UserServiceImpl.java @@ -1,6 +1,6 @@ package com.qqchen.deploy.backend.service.impl; -import com.qqchen.deploy.common.service.impl.BaseServiceImpl; +import com.qqchen.deploy.backend.common.service.impl.BaseServiceImpl; import com.qqchen.deploy.backend.entity.User; import com.qqchen.deploy.backend.repository.UserRepository; import com.qqchen.deploy.backend.service.UserService; diff --git a/backend/src/main/java/com/qqchen/deploy/common/config/SecurityConfig.java b/backend/src/main/java/com/qqchen/deploy/common/config/SecurityConfig.java deleted file mode 100644 index 3c7ae33f..00000000 --- a/backend/src/main/java/com/qqchen/deploy/common/config/SecurityConfig.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.qqchen.deploy.common.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.web.SecurityFilterChain; - -@Configuration -@EnableWebSecurity -public class SecurityConfig { - - @Bean - public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { - http - .csrf(csrf -> csrf.disable()) // 禁用CSRF - .authorizeHttpRequests(auth -> auth -// // 公开接口 -// .requestMatchers("/*/*").permitAll() -// // Swagger相关接口 -// .requestMatchers("/swagger-ui/**", "/v3/api-docs/**").permitAll() -// // 健康检查接口 -// .requestMatchers("/actuator/**").permitAll() - // 开发阶段可以暂时允许所有请求 - .anyRequest().permitAll() - // 生产环境建议改为需要认证 - //.anyRequest().authenticated() - ); - - return http.build(); - } -} \ No newline at end of file diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml index 6988c206..01f1502d 100644 --- a/backend/src/main/resources/application.yml +++ b/backend/src/main/resources/application.yml @@ -7,18 +7,24 @@ spring: username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver - jpa: hibernate: ddl-auto: update show-sql: true properties: hibernate: - format_sql: true + format_sql: false + use_sql_comments: true dialect: org.hibernate.dialect.MySQL8Dialect jdbc: time_zone: Asia/Shanghai - + mvc: + log-request-details: true # \u6253\u5370\u8BF7\u6C42\u8BE6\u60C5 +logging: + level: + org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping: TRACE # \u6253\u5370\u6240\u6709\u6CE8\u518C\u7684\u63A5\u53E3\u8DEF\u5F84 + org.hibernate.type.descriptor.sql.BasicBinder: TRACE # \u663E\u793ASQL\u53C2\u6570 + org.hibernate.type.descriptor.sql: TRACE jwt: secret: 'thisIsAVeryVerySecretKeyForJwtTokenGenerationAndValidation123456789' expiration: 86400