From 5b2e5dee02ccb8fb78fac10f4222b6d12bd4ba68 Mon Sep 17 00:00:00 2001 From: root <2930804527@qq.com> Date: Thu, 1 Aug 2024 09:45:02 +0800 Subject: [PATCH] exam-week-0730 --- .gitignore | 38 +++ .idea/$PROJECT_FILE$ | 11 + .idea/.gitignore | 8 + .idea/encodings.xml | 14 + .idea/misc.xml | 17 + .idea/qaplug_profiles.xml | 12 + .idea/uiDesigner.xml | 124 +++++++ bwie-auth/pom.xml | 48 +++ .../main/java/com/bwie/AuthApplication.java | 13 + .../bwie/auth/config/InitPasswordEncode.java | 15 + .../bwie/auth/config/RabbitAdminConfig.java | 53 +++ .../com/bwie/auth/config/RabbitmqConfig.java | 15 + .../bwie/auth/controller/AuthController.java | 48 +++ .../java/com/bwie/auth/feign/AuthFactory.java | 19 ++ .../java/com/bwie/auth/feign/AuthFeign.java | 16 + .../com/bwie/auth/service/AuthService.java | 13 + .../auth/service/impl/AuthServiceImpl.java | 70 ++++ .../java/com/bwie/auth/utils/DLXQueue.java | 77 +++++ .../com/bwie/auth/utils/DelayedQueue.java | 79 +++++ .../java/com/bwie/auth/utils/TtlQueue.java | 66 ++++ bwie-auth/src/main/resources/bootstrap.yml | 114 +++++++ bwie-common/pom.xml | 107 ++++++ .../com/bwie/common/constants/Constants.java | 18 + .../bwie/common/constants/JwtConstants.java | 29 ++ .../bwie/common/constants/QueueConstants.java | 10 + .../constants/RabbitMQOneConstants.java | 11 + .../constants/RabbitMQTwoConstants.java | 12 + .../bwie/common/constants/TokenConstants.java | 21 ++ .../java/com/bwie/common/domain/Home.java | 13 + .../java/com/bwie/common/domain/HomeVo.java | 11 + .../java/com/bwie/common/domain/Rent.java | 18 + .../java/com/bwie/common/domain/Test.java | 10 + .../java/com/bwie/common/domain/User.java | 15 + .../common/domain/response/JwtResponse.java | 9 + .../com/bwie/common/exception/Exception.java | 22 ++ .../com/bwie/common/result/PageResult.java | 31 ++ .../java/com/bwie/common/result/Result.java | 73 +++++ .../java/com/bwie/common/utils/IpUtils.java | 308 ++++++++++++++++++ .../java/com/bwie/common/utils/JwtUtils.java | 106 ++++++ .../com/bwie/common/utils/StringUtils.java | 65 ++++ .../com/bwie/common/utils/TelSmsUtils.java | 88 +++++ bwie-gateway/pom.xml | 44 +++ .../java/com/bwie/GatewayApplication.java | 11 + .../gateway/config/IgnoreWhiteConfig.java | 29 ++ .../com/bwie/gateway/filters/AuthFilter.java | 60 ++++ .../com/bwie/gateway/utils/GatewayUtils.java | 95 ++++++ bwie-gateway/src/main/resources/bootstrap.yml | 31 ++ bwie-modules/bwie-mq/pom.xml | 38 +++ .../src/main/java/com/bwie/MqApplication.java | 13 + .../config/ConfirmCallbackConfig.java | 40 +++ .../rabbitmq/config/RabbitAdminConfig.java | 50 +++ .../bwie/rabbitmq/config/RabbitmqConfig.java | 15 + .../config/ReturnsCallbackConfig.java | 37 +++ .../bwie/rabbitmq/consumer/MsgConsumer.java | 30 ++ .../bwie-mq/src/main/resources/bootstrap.yml | 45 +++ bwie-modules/bwie-system/pom.xml | 67 ++++ .../main/java/com/bwie/SystemApplication.java | 17 + .../com/bwie/system/config/FastConfig.java | 13 + .../java/com/bwie/system/config/FastUtil.java | 50 +++ .../com/bwie/system/config/InitEsRes.java | 26 ++ .../system/controller/HomeController.java | 46 +++ .../system/controller/RentController.java | 55 ++++ .../system/controller/UserController.java | 53 +++ .../com/bwie/system/mapper/HomeMapper.java | 12 + .../com/bwie/system/mapper/RentMapper.java | 11 + .../com/bwie/system/mapper/UserMapper.java | 9 + .../com/bwie/system/service/HomeService.java | 10 + .../com/bwie/system/service/RentService.java | 11 + .../com/bwie/system/service/UserService.java | 9 + .../system/service/impl/HomeServiceImpl.java | 27 ++ .../system/service/impl/RentServiceImpl.java | 65 ++++ .../system/service/impl/UserServiceImpl.java | 37 +++ .../src/main/resources/bootstrap.yml | 51 +++ .../src/main/resources/mapper/HomeMapper.xml | 22 ++ .../src/main/resources/mapper/RentMapper.xml | 15 + .../src/main/resources/mapper/UserMapper.xml | 12 + bwie-modules/pom.xml | 25 ++ pom.xml | 67 ++++ sql/exam-week-0730.sql | 89 +++++ 理论/img.png | Bin 0 -> 203204 bytes 80 files changed, 3184 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/$PROJECT_FILE$ create mode 100644 .idea/.gitignore create mode 100644 .idea/encodings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/qaplug_profiles.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 bwie-auth/pom.xml create mode 100644 bwie-auth/src/main/java/com/bwie/AuthApplication.java create mode 100644 bwie-auth/src/main/java/com/bwie/auth/config/InitPasswordEncode.java create mode 100644 bwie-auth/src/main/java/com/bwie/auth/config/RabbitAdminConfig.java create mode 100644 bwie-auth/src/main/java/com/bwie/auth/config/RabbitmqConfig.java create mode 100644 bwie-auth/src/main/java/com/bwie/auth/controller/AuthController.java create mode 100644 bwie-auth/src/main/java/com/bwie/auth/feign/AuthFactory.java create mode 100644 bwie-auth/src/main/java/com/bwie/auth/feign/AuthFeign.java create mode 100644 bwie-auth/src/main/java/com/bwie/auth/service/AuthService.java create mode 100644 bwie-auth/src/main/java/com/bwie/auth/service/impl/AuthServiceImpl.java create mode 100644 bwie-auth/src/main/java/com/bwie/auth/utils/DLXQueue.java create mode 100644 bwie-auth/src/main/java/com/bwie/auth/utils/DelayedQueue.java create mode 100644 bwie-auth/src/main/java/com/bwie/auth/utils/TtlQueue.java create mode 100644 bwie-auth/src/main/resources/bootstrap.yml create mode 100644 bwie-common/pom.xml create mode 100644 bwie-common/src/main/java/com/bwie/common/constants/Constants.java create mode 100644 bwie-common/src/main/java/com/bwie/common/constants/JwtConstants.java create mode 100644 bwie-common/src/main/java/com/bwie/common/constants/QueueConstants.java create mode 100644 bwie-common/src/main/java/com/bwie/common/constants/RabbitMQOneConstants.java create mode 100644 bwie-common/src/main/java/com/bwie/common/constants/RabbitMQTwoConstants.java create mode 100644 bwie-common/src/main/java/com/bwie/common/constants/TokenConstants.java create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/Home.java create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/HomeVo.java create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/Rent.java create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/Test.java create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/User.java create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/response/JwtResponse.java create mode 100644 bwie-common/src/main/java/com/bwie/common/exception/Exception.java create mode 100644 bwie-common/src/main/java/com/bwie/common/result/PageResult.java create mode 100644 bwie-common/src/main/java/com/bwie/common/result/Result.java create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/IpUtils.java create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/JwtUtils.java create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/StringUtils.java create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/TelSmsUtils.java create mode 100644 bwie-gateway/pom.xml create mode 100644 bwie-gateway/src/main/java/com/bwie/GatewayApplication.java create mode 100644 bwie-gateway/src/main/java/com/bwie/gateway/config/IgnoreWhiteConfig.java create mode 100644 bwie-gateway/src/main/java/com/bwie/gateway/filters/AuthFilter.java create mode 100644 bwie-gateway/src/main/java/com/bwie/gateway/utils/GatewayUtils.java create mode 100644 bwie-gateway/src/main/resources/bootstrap.yml create mode 100644 bwie-modules/bwie-mq/pom.xml create mode 100644 bwie-modules/bwie-mq/src/main/java/com/bwie/MqApplication.java create mode 100644 bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/config/ConfirmCallbackConfig.java create mode 100644 bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/config/RabbitAdminConfig.java create mode 100644 bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/config/RabbitmqConfig.java create mode 100644 bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/config/ReturnsCallbackConfig.java create mode 100644 bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/consumer/MsgConsumer.java create mode 100644 bwie-modules/bwie-mq/src/main/resources/bootstrap.yml create mode 100644 bwie-modules/bwie-system/pom.xml create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/SystemApplication.java create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/config/FastConfig.java create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/config/FastUtil.java create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/config/InitEsRes.java create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/controller/HomeController.java create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/controller/RentController.java create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/controller/UserController.java create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/mapper/HomeMapper.java create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/mapper/RentMapper.java create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/mapper/UserMapper.java create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/service/HomeService.java create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/service/RentService.java create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/service/UserService.java create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/service/impl/HomeServiceImpl.java create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/service/impl/RentServiceImpl.java create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/service/impl/UserServiceImpl.java create mode 100644 bwie-modules/bwie-system/src/main/resources/bootstrap.yml create mode 100644 bwie-modules/bwie-system/src/main/resources/mapper/HomeMapper.xml create mode 100644 bwie-modules/bwie-system/src/main/resources/mapper/RentMapper.xml create mode 100644 bwie-modules/bwie-system/src/main/resources/mapper/UserMapper.xml create mode 100644 bwie-modules/pom.xml create mode 100644 pom.xml create mode 100644 sql/exam-week-0730.sql create mode 100644 理论/img.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/.idea/$PROJECT_FILE$ b/.idea/$PROJECT_FILE$ new file mode 100644 index 0000000..58b7e3e --- /dev/null +++ b/.idea/$PROJECT_FILE$ @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..f3733cf --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..1ed4b0e --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/qaplug_profiles.xml b/.idea/qaplug_profiles.xml new file mode 100644 index 0000000..9a7566c --- /dev/null +++ b/.idea/qaplug_profiles.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bwie-auth/pom.xml b/bwie-auth/pom.xml new file mode 100644 index 0000000..d6c090b --- /dev/null +++ b/bwie-auth/pom.xml @@ -0,0 +1,48 @@ + + + 4.0.0 + + com.bwie + exam-week-0730 + 1.0-SNAPSHOT + + + bwie-auth + + + 17 + 17 + UTF-8 + + + + + + com.bwie + bwie-common + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + + + + org.springframework.kafka + spring-kafka + + + + diff --git a/bwie-auth/src/main/java/com/bwie/AuthApplication.java b/bwie-auth/src/main/java/com/bwie/AuthApplication.java new file mode 100644 index 0000000..f3e6e03 --- /dev/null +++ b/bwie-auth/src/main/java/com/bwie/AuthApplication.java @@ -0,0 +1,13 @@ +package com.bwie; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + +@SpringBootApplication +@EnableFeignClients +public class AuthApplication { + public static void main(String[] args) { + SpringApplication.run(AuthApplication.class,args); + } +} diff --git a/bwie-auth/src/main/java/com/bwie/auth/config/InitPasswordEncode.java b/bwie-auth/src/main/java/com/bwie/auth/config/InitPasswordEncode.java new file mode 100644 index 0000000..b369484 --- /dev/null +++ b/bwie-auth/src/main/java/com/bwie/auth/config/InitPasswordEncode.java @@ -0,0 +1,15 @@ +package com.bwie.auth.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.stereotype.Component; + + +@Component +public class InitPasswordEncode { + + @Bean + public BCryptPasswordEncoder bCryptPasswordEncoder(){ + return new BCryptPasswordEncoder(); + } +} diff --git a/bwie-auth/src/main/java/com/bwie/auth/config/RabbitAdminConfig.java b/bwie-auth/src/main/java/com/bwie/auth/config/RabbitAdminConfig.java new file mode 100644 index 0000000..d2abf6c --- /dev/null +++ b/bwie-auth/src/main/java/com/bwie/auth/config/RabbitAdminConfig.java @@ -0,0 +1,53 @@ +package com.bwie.auth.config; + +import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * RabbitAdmin是RabbitMQ的一个Java客户端库,它提供了管理RabbitMQ资源的功能。它是通过与RabbitMQ服务器进行交互来执行管理操作的。 + */ +@Configuration +public class RabbitAdminConfig { + + @Value("${spring.rabbitmq.host}") + private String host; + @Value("${spring.rabbitmq.username}") + private String username; + @Value("${spring.rabbitmq.password}") + private String password; + @Value("${spring.rabbitmq.virtualhost}") + private String virtualhost; + + /** + * 构建 RabbitMQ的连接工厂 + * @return + */ + @Bean + public ConnectionFactory connectionFactory() { + CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); + connectionFactory.setAddresses(host); + connectionFactory.setUsername(username); + connectionFactory.setPassword(password); + connectionFactory.setVirtualHost(virtualhost); + // 配置发送确认回调时,次配置必须配置,否则即使在RabbitTemplate配置了ConfirmCallback也不会生效 + connectionFactory.setPublisherConfirmType(CachingConnectionFactory.ConfirmType.CORRELATED); + connectionFactory.setPublisherReturns(true); + return connectionFactory; + } + + /** + * 自己初始化 RabbitAdmin + * @param connectionFactory + * @return + */ + @Bean + public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) { + RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory); + rabbitAdmin.setAutoStartup(true); + return rabbitAdmin; + } +} diff --git a/bwie-auth/src/main/java/com/bwie/auth/config/RabbitmqConfig.java b/bwie-auth/src/main/java/com/bwie/auth/config/RabbitmqConfig.java new file mode 100644 index 0000000..4a70879 --- /dev/null +++ b/bwie-auth/src/main/java/com/bwie/auth/config/RabbitmqConfig.java @@ -0,0 +1,15 @@ +package com.bwie.auth.config; + +import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; +import org.springframework.amqp.support.converter.MessageConverter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class RabbitmqConfig { + // 消息转换配置 + @Bean + public MessageConverter jsonMessageConverter() { + return new Jackson2JsonMessageConverter(); + } +} diff --git a/bwie-auth/src/main/java/com/bwie/auth/controller/AuthController.java b/bwie-auth/src/main/java/com/bwie/auth/controller/AuthController.java new file mode 100644 index 0000000..983df7a --- /dev/null +++ b/bwie-auth/src/main/java/com/bwie/auth/controller/AuthController.java @@ -0,0 +1,48 @@ +package com.bwie.auth.controller; + +import com.bwie.auth.service.AuthService; +import com.bwie.common.domain.User; +import com.bwie.common.domain.response.JwtResponse; +import com.bwie.common.result.Result; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/auth") +public class AuthController { + + @Autowired + private AuthService authService; + + /** + * 登录认证 + * @param user + * @return + */ + @PostMapping("/login") + public Result login(@RequestBody User user){ + return authService.login(user); + } + + /** + * 校验 + * @return + */ + @PostMapping("/info") + public Result info(){ + return authService.info(); + } + + /** + * 退出登录 + * @return + */ + @PostMapping("/logout") + public Result logout(){ + return authService.logout(); + } + +} diff --git a/bwie-auth/src/main/java/com/bwie/auth/feign/AuthFactory.java b/bwie-auth/src/main/java/com/bwie/auth/feign/AuthFactory.java new file mode 100644 index 0000000..6f6e1e9 --- /dev/null +++ b/bwie-auth/src/main/java/com/bwie/auth/feign/AuthFactory.java @@ -0,0 +1,19 @@ +package com.bwie.auth.feign; + +import com.bwie.common.domain.User; +import com.bwie.common.result.Result; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +@Component +public class AuthFactory implements FallbackFactory { + @Override + public AuthFeign create(Throwable cause) { + return new AuthFeign() { + @Override + public Result login(User user) { + return Result.error(cause.getMessage()); + } + }; + } +} diff --git a/bwie-auth/src/main/java/com/bwie/auth/feign/AuthFeign.java b/bwie-auth/src/main/java/com/bwie/auth/feign/AuthFeign.java new file mode 100644 index 0000000..8e54a40 --- /dev/null +++ b/bwie-auth/src/main/java/com/bwie/auth/feign/AuthFeign.java @@ -0,0 +1,16 @@ +package com.bwie.auth.feign; + + +import com.bwie.common.domain.User; +import com.bwie.common.result.Result; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +@FeignClient(value = "bwie-system/user",fallbackFactory = AuthFactory.class) +public interface AuthFeign { + + @PostMapping("/login") + public Result login(@RequestBody User user); + +} diff --git a/bwie-auth/src/main/java/com/bwie/auth/service/AuthService.java b/bwie-auth/src/main/java/com/bwie/auth/service/AuthService.java new file mode 100644 index 0000000..dde4638 --- /dev/null +++ b/bwie-auth/src/main/java/com/bwie/auth/service/AuthService.java @@ -0,0 +1,13 @@ +package com.bwie.auth.service; + +import com.bwie.common.domain.User; +import com.bwie.common.domain.response.JwtResponse; +import com.bwie.common.result.Result; + +public interface AuthService { + Result login(User user); + + Result info(); + + Result logout(); +} diff --git a/bwie-auth/src/main/java/com/bwie/auth/service/impl/AuthServiceImpl.java b/bwie-auth/src/main/java/com/bwie/auth/service/impl/AuthServiceImpl.java new file mode 100644 index 0000000..e4e9a9b --- /dev/null +++ b/bwie-auth/src/main/java/com/bwie/auth/service/impl/AuthServiceImpl.java @@ -0,0 +1,70 @@ +package com.bwie.auth.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.bwie.auth.feign.AuthFeign; +import com.bwie.auth.service.AuthService; +import com.bwie.common.constants.JwtConstants; +import com.bwie.common.constants.TokenConstants; +import com.bwie.common.domain.User; +import com.bwie.common.domain.response.JwtResponse; +import com.bwie.common.result.Result; +import com.bwie.common.utils.JwtUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +@Service +public class AuthServiceImpl implements AuthService { + + @Autowired + private AuthFeign authFeign; + @Autowired + private HttpServletRequest request; + @Autowired + private StringRedisTemplate redisTemplate; + + @Override + public Result login(User user) { + Result login = authFeign.login(user); + if (login.getCode()==500){ + return Result.error("账号密码不匹配"); + } + User user1 = login.getData(); + String userKey = UUID.randomUUID().toString().replaceAll("-", ""); + redisTemplate.opsForValue().set( + TokenConstants.LOGIN_TOKEN_KEY+userKey, + JSONObject.toJSONString(user1), + TokenConstants.EXPIRATION, + TimeUnit.MINUTES + ); + Map map = new HashMap<>(); + map.put(JwtConstants.USER_KEY,userKey); + String token = JwtUtils.createToken(map); + JwtResponse jwtResponse = new JwtResponse(); + jwtResponse.setToken(token); + jwtResponse.setExistTime("720MIN"); + return Result.success(jwtResponse); + } + + @Override + public Result info() { + String token = request.getHeader(TokenConstants.TOKEN); + String userKey = JwtUtils.getUserKey(token); + String s = redisTemplate.opsForValue().get(TokenConstants.LOGIN_TOKEN_KEY + userKey); + return Result.success(JSONObject.parseObject(s,User.class)); + } + + @Override + public Result logout() { + String token = request.getHeader(TokenConstants.TOKEN); + String userKey = JwtUtils.getUserKey(token); + redisTemplate.delete(TokenConstants.LOGIN_TOKEN_KEY + userKey); + return Result.success(); + } +} diff --git a/bwie-auth/src/main/java/com/bwie/auth/utils/DLXQueue.java b/bwie-auth/src/main/java/com/bwie/auth/utils/DLXQueue.java new file mode 100644 index 0000000..d76e2c2 --- /dev/null +++ b/bwie-auth/src/main/java/com/bwie/auth/utils/DLXQueue.java @@ -0,0 +1,77 @@ +package com.bwie.auth.utils; + +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +@Component +public class DLXQueue { + // routingKey + private static final String DEAD_ROUTING_KEY = "dead.routingkey"; + private static final String ROUTING_KEY = "routingkey"; + private static final String DEAD_EXCHANGE = "dead.exchange"; + private static final String EXCHANGE = "common.exchange"; + @Autowired + RabbitTemplate rabbitTemplate; + @Resource + RabbitAdmin rabbitAdmin; + + /** + * 发送死信队列,过期后进入死信交换机,进入死信队列 + * + * @param queueName 队列名称 + * @param deadQueueName 死信队列名称 + * @param params 消息内容 + * @param expiration 过期时间 毫秒 + */ + public void sendDLXQueue(String queueName, String deadQueueName, Object params, Integer expiration) { + /** + * ----------------------------------先创建一个ttl队列和死信队列-------------------------------------------- + */ + Map map = new HashMap<>(); + // 队列设置存活时间,单位ms, 必须是整形数据。 + map.put("x-message-ttl", expiration); + // 设置死信交换机 + map.put("x-dead-letter-exchange", DEAD_EXCHANGE); + // 设置死信交换器路由 + map.put("x-dead-letter-routing-key", DEAD_ROUTING_KEY); + /*参数1:队列名称 参数2:持久化 参数3:是否排他 参数4:自动删除队列 参数5:队列参数*/ + Queue queue = new Queue(queueName, true, false, false, map); + rabbitAdmin.declareQueue(queue); + /** + * ---------------------------------创建交换机--------------------------------------------- + */ + DirectExchange directExchange = new DirectExchange(EXCHANGE, true, false); + rabbitAdmin.declareExchange(directExchange); + /** + * ---------------------------------队列绑定交换机--------------------------------------------- + */ + Binding binding = BindingBuilder.bind(queue).to(directExchange).with(ROUTING_KEY); + rabbitAdmin.declareBinding(binding); + /** + * ---------------------------------在创建一个死信交换机和队列,接收死信队列--------------------------------------------- + */ + DirectExchange deadExchange = new DirectExchange(DEAD_EXCHANGE, true, false); + rabbitAdmin.declareExchange(deadExchange); + + Queue deadQueue = new Queue(deadQueueName, true, false, false); + rabbitAdmin.declareQueue(deadQueue); + /** + * ---------------------------------队列绑定死信交换机--------------------------------------------- + */ + // 将队列和交换机绑定 + Binding deadbinding = BindingBuilder.bind(deadQueue).to(deadExchange).with(DEAD_ROUTING_KEY); + rabbitAdmin.declareBinding(deadbinding); + // 发送消息 + rabbitTemplate.convertAndSend(EXCHANGE, ROUTING_KEY, params); + } +} diff --git a/bwie-auth/src/main/java/com/bwie/auth/utils/DelayedQueue.java b/bwie-auth/src/main/java/com/bwie/auth/utils/DelayedQueue.java new file mode 100644 index 0000000..0df9f49 --- /dev/null +++ b/bwie-auth/src/main/java/com/bwie/auth/utils/DelayedQueue.java @@ -0,0 +1,79 @@ +package com.bwie.auth.utils; + +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.CustomExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +/** + * 发送延迟队列的工具类 + */ +@Component +public class DelayedQueue { + + // routingKey + private static final String DELAYED_ROUTING_KEY = "delayed.routingkey"; + + // 延迟队列交换机 + private static final String DELAYED_EXCHANGE = "delayed.exchange"; + + @Autowired + RabbitTemplate rabbitTemplate; + + @Resource + RabbitAdmin rabbitAdmin; + + /** + * 发送延迟队列 + * + * @param queueName 队列名称 + * @param params 消息内容 + * @param expiration 延迟时间 毫秒 + */ + public void sendDelayedQueue(String queueName, Object params, Integer expiration) { + // 先创建一个队列 + Queue queue = new Queue(queueName); + rabbitAdmin.declareQueue(queue); + + // 创建延迟队列交换机 + CustomExchange customExchange = createCustomExchange(); + rabbitAdmin.declareExchange(customExchange); + + // 将队列和交换机绑定 + Binding binding = BindingBuilder.bind(queue).to(customExchange).with(DELAYED_ROUTING_KEY).noargs(); + rabbitAdmin.declareBinding(binding); + + // 发送延迟消息 + rabbitTemplate.convertAndSend(DELAYED_EXCHANGE, DELAYED_ROUTING_KEY, params, msg -> { + // 发送消息的时候 延迟时长 + msg.getMessageProperties().setMessageId(UUID.randomUUID().toString().replaceAll("-", "")); + msg.getMessageProperties().setDelay(expiration); + return msg; + }); + } + + private CustomExchange createCustomExchange() { + Map arguments = new HashMap<>(); + /** + * 参数说明: + * 1.交换机的名称 + * 2.交换机的类型 + * 3.是否需要持久化 + * 4.是否自动删除 + * 5.其它参数 + */ + arguments.put("x-delayed-type", "direct"); + return new CustomExchange(DELAYED_EXCHANGE, "x-delayed-message", true, false, arguments); + } + +} + diff --git a/bwie-auth/src/main/java/com/bwie/auth/utils/TtlQueue.java b/bwie-auth/src/main/java/com/bwie/auth/utils/TtlQueue.java new file mode 100644 index 0000000..51db22d --- /dev/null +++ b/bwie-auth/src/main/java/com/bwie/auth/utils/TtlQueue.java @@ -0,0 +1,66 @@ +package com.bwie.auth.utils; + +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +/** + * 发送TTL队列 设置 消息的存活时间 如果超过了存活时间 + * 该条消息还没有被消费 则自动从队列中消息 ,如果配置了死信队列则消息会进入死信队列 + */ +@Component +public class TtlQueue { + // routingKey + private static final String TTL_KEY = "ttl.routingkey"; + private static final String TTL_EXCHANGE = "ttl.exchange"; + + @Autowired + RabbitTemplate rabbitTemplate; + + @Resource + RabbitAdmin rabbitAdmin; + + /** + * 发送TTL队列 + * + * @param queueName 队列名称 + * @param params 消息内容 + * @param expiration 过期时间 毫秒 + */ + public void sendTtlQueue(String queueName, Object params, Integer expiration) { + /** + * ----------------------------------先创建一个ttl队列-------------------------------------------- + */ + Map map = new HashMap<>(); + // 队列设置存活时间,单位ms,必须是整形数据。 + map.put("x-message-ttl", expiration); + /*参数1:队列名称 参数2:持久化 参数3:是否排他 参数4:自动删除队列 参数5:队列参数*/ + Queue queue = new Queue(queueName, true, false, false, map); + rabbitAdmin.declareQueue(queue); + + /** + * ---------------------------------创建交换机--------------------------------------------- + */ + DirectExchange directExchange = new DirectExchange(TTL_EXCHANGE, true, false); + rabbitAdmin.declareExchange(directExchange); + /** + * ---------------------------------队列绑定交换机--------------------------------------------- + */ + // 将队列和交换机绑定 + Binding binding = BindingBuilder.bind(queue).to(directExchange).with(TTL_KEY); + rabbitAdmin.declareBinding(binding); + + // 发送消息 + rabbitTemplate.convertAndSend(TTL_EXCHANGE, TTL_KEY, params); + } +} + diff --git a/bwie-auth/src/main/resources/bootstrap.yml b/bwie-auth/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..0d94734 --- /dev/null +++ b/bwie-auth/src/main/resources/bootstrap.yml @@ -0,0 +1,114 @@ +# Tomcat +server: + port: 9001 +# Spring +spring: + main: + allow-circular-references: true + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + application: + # 应用名称 + name: bwie-auth + kafka: + producer: + # Kafka服务器 + bootstrap-servers: 106.54.42.224:9092 + # 开启事务,必须在开启了事务的方法中发送,否则报错 + transaction-id-prefix: kafkaTx- + # 发生错误后,消息重发的次数,开启事务必须设置大于0。 + retries: 3 + # acks=0 : 生产者在成功写入消息之前不会等待任何来自服务器的响应。 + # acks=1 : 只要集群的首领节点收到消息,生产者就会收到一个来自服务器成功响应。 + # acks=all :只有当所有参与复制的节点全部收到消息时,生产者才会收到一个来自服务器的成功响应。 + # 开启事务时,必须设置为all + acks: all + # 当有多个消息需要被发送到同一个分区时,生产者会把它们放在同一个批次里。该参数指定了一个批次可以使用的内存大小,按照字节数计算。 + batch-size: 16384 + # 生产者内存缓冲区的大小。 + buffer-memory: 1024000 + # 键的序列化方式 + key-serializer: org.springframework.kafka.support.serializer.JsonSerializer + # 值的序列化方式(建议使用Json,这种序列化方式可以无需额外配置传输实体类) + value-serializer: org.springframework.kafka.support.serializer.JsonSerializer + + consumer: + # Kafka服务器 + bootstrap-servers: 106.54.42.224:9092 + group-id: firstGroup + # 自动提交的时间间隔 在spring boot 2.X 版本中这里采用的是值的类型为Duration 需要符合特定的格式,如1S,1M,2H,5D + #auto-commit-interval: 2s + # 该属性指定了消费者在读取一个没有偏移量的分区或者偏移量无效的情况下该作何处理: + # earliest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费分区的记录 + # latest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据(在消费者启动之后生成的记录) + # none:当各分区都存在已提交的offset时,从提交的offset开始消费;只要有一个分区不存在已提交的offset,则抛出异常 + auto-offset-reset: latest + # 是否自动提交偏移量,默认值是true,为了避免出现重复数据和数据丢失,可以把它设置为false,然后手动提交偏移量 + enable-auto-commit: false + # 键的反序列化方式 + #key-deserializer: org.apache.kafka.common.serialization.StringDeserializer + key-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer + # 值的反序列化方式(建议使用Json,这种序列化方式可以无需额外配置传输实体类) + value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer + # 配置消费者的 Json 反序列化的可信赖包,反序列化实体类需要 + properties: + spring: + json: + trusted: + packages: "*" + # 这个参数定义了poll方法最多可以拉取多少条消息,默认值为500。如果在拉取消息的时候新消息不足500条,那有多少返回多少;如果超过500条,每次只返回500。 + # 这个默认值在有些场景下太大,有些场景很难保证能够在5min内处理完500条消息, + # 如果消费者无法在5分钟内处理完500条消息的话就会触发reBalance, + # 然后这批消息会被分配到另一个消费者中,还是会处理不完,这样这批消息就永远也处理不完。 + # 要避免出现上述问题,提前评估好处理一条消息最长需要多少时间,然后覆盖默认的max.poll.records参数 + # 注:需要开启BatchListener批量监听才会生效,如果不开启BatchListener则不会出现reBalance情况 + max-poll-records: 3 + properties: + # 两次poll之间的最大间隔,默认值为5分钟。如果超过这个间隔会触发reBalance + max: + poll: + interval: + ms: 600000 + # 当broker多久没有收到consumer的心跳请求后就触发reBalance,默认值是10s + session: + timeout: + ms: 10000 + listener: + # 在侦听器容器中运行的线程数,一般设置为 机器数*分区数 + concurrency: 4 + # 自动提交关闭,需要设置手动消息确认 + ack-mode: manual_immediate + # 消费监听接口监听的主题不存在时,默认会报错,所以设置为false忽略错误 + missing-topics-fatal: false + # 两次poll之间的最大间隔,默认值为5分钟。如果超过这个间隔会触发reBalance + poll-timeout: 600000 + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 106.54.42.224:8848 + namespace: fea09e77-e454-404c-b4d1-e53e5acee562 + config: + # 配置中心地址 + server-addr: 106.54.42.224:8848 + namespace: fea09e77-e454-404c-b4d1-e53e5acee562 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + rabbitmq: + username: guest + password: guest + virtualHost: / + port: 5672 + host: 106.54.42.224 + listener: + simple: + prefetch: 1 # 每次只能获取一条,处理完成才能获取下一条 + publisher-confirm-type: correlated #确认消息已发送到交换机(Exchange) + publisher-returns: true #确认消息已发送到队列(Queue) diff --git a/bwie-common/pom.xml b/bwie-common/pom.xml new file mode 100644 index 0000000..04f9613 --- /dev/null +++ b/bwie-common/pom.xml @@ -0,0 +1,107 @@ + + + 4.0.0 + + com.bwie + exam-week-0730 + 1.0-SNAPSHOT + + + bwie-common + + + 17 + 17 + UTF-8 + + + + + + + javax.servlet + javax.servlet-api + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + org.springframework.cloud + spring-cloud-starter-loadbalancer + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + io.jsonwebtoken + jjwt + 0.9.1 + + + + com.alibaba + fastjson + 1.2.80 + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + org.springframework.boot + spring-boot-starter-validation + + + + org.apache.commons + commons-lang3 + + + + org.projectlombok + lombok + + + + cn.hutool + hutool-all + 5.8.3 + + + + com.aliyun + dysmsapi20170525 + 2.0.1 + + + + org.springframework.boot + spring-boot-starter-amqp + + + + diff --git a/bwie-common/src/main/java/com/bwie/common/constants/Constants.java b/bwie-common/src/main/java/com/bwie/common/constants/Constants.java new file mode 100644 index 0000000..0ecff94 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/constants/Constants.java @@ -0,0 +1,18 @@ +package com.bwie.common.constants; + +/** + * @description: 系统常量 + * @author sheyudie + */ +public class Constants { + /** + * 成功标记 + */ + public static final Integer SUCCESS = 200; + public static final String SUCCESS_MSG = "操作成功"; + /** + * 失败标记 + */ + public static final Integer ERROR = 500; + public static final String ERROR_MSG = "操作异常"; +} diff --git a/bwie-common/src/main/java/com/bwie/common/constants/JwtConstants.java b/bwie-common/src/main/java/com/bwie/common/constants/JwtConstants.java new file mode 100644 index 0000000..3cfa36c --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/constants/JwtConstants.java @@ -0,0 +1,29 @@ +package com.bwie.common.constants; + +/** + * @author sheyudie + * @description: Jwt常量 + */ +public class JwtConstants { + + /** + * 用户ID字段 + */ + public static final String DETAILS_USER_ID = "user_id"; + + /** + * 用户名字段 + */ + public static final String DETAILS_USERNAME = "username"; + + /** + * 用户标识 + */ + public static final String USER_KEY = "user_key"; + + /** + * 令牌秘钥 + */ + public final static String SECRET = "abcdefghijklmnopqrstuvwxyz"; + +} diff --git a/bwie-common/src/main/java/com/bwie/common/constants/QueueConstants.java b/bwie-common/src/main/java/com/bwie/common/constants/QueueConstants.java new file mode 100644 index 0000000..1e38a29 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/constants/QueueConstants.java @@ -0,0 +1,10 @@ +package com.bwie.common.constants; + + +public class QueueConstants { + + public static final String SEND_CODE_QUEUE = "send_code_queue"; + public static final String SEND_CODE_PREVENT_REPEAT_ID = "send_code_prevent_repeat_id:"; + public static final String BLOG_UPDATE_QUEUE = "blog_update_queue"; + public static final String BLOG_UPDATE_PREVENT_REPEAT_ID = "blog_update_prevent_repeat_id:"; +} diff --git a/bwie-common/src/main/java/com/bwie/common/constants/RabbitMQOneConstants.java b/bwie-common/src/main/java/com/bwie/common/constants/RabbitMQOneConstants.java new file mode 100644 index 0000000..464fc12 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/constants/RabbitMQOneConstants.java @@ -0,0 +1,11 @@ +package com.bwie.common.constants; + +public class RabbitMQOneConstants { + + //发送短消息队列名称 + public static final String SEND_SHORT_MESSAGE_QUEUE_NAME = "send_short_message"; + + //查看的日志队列名称 + public static final String QUERY_LOG_QUEUE_NAME = "query_log_message"; + +} diff --git a/bwie-common/src/main/java/com/bwie/common/constants/RabbitMQTwoConstants.java b/bwie-common/src/main/java/com/bwie/common/constants/RabbitMQTwoConstants.java new file mode 100644 index 0000000..550b7db --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/constants/RabbitMQTwoConstants.java @@ -0,0 +1,12 @@ +package com.bwie.common.constants; + + +public class RabbitMQTwoConstants { + + //发送消息队列名称 + public static final String SEND_SMS_QUEUE = "send_sms_queue"; + + //添加消息队列名称日志 + public static final String ADD_MESSAGE_QUEUE_NAME_LOG = "add_message_log"; + +} diff --git a/bwie-common/src/main/java/com/bwie/common/constants/TokenConstants.java b/bwie-common/src/main/java/com/bwie/common/constants/TokenConstants.java new file mode 100644 index 0000000..1ce86fa --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/constants/TokenConstants.java @@ -0,0 +1,21 @@ +package com.bwie.common.constants; + + +public class TokenConstants { + /** + * 缓存有效期,默认720(分钟) + */ + public final static long EXPIRATION = 720; + /** + * 缓存刷新时间,默认120(分钟) + */ + public final static long REFRESH_TIME = 120; + /** + * 权限缓存前缀 + */ + public final static String LOGIN_TOKEN_KEY = "login_tokens:"; + /** + * token标识 + */ + public static final String TOKEN = "token"; +} diff --git a/bwie-common/src/main/java/com/bwie/common/domain/Home.java b/bwie-common/src/main/java/com/bwie/common/domain/Home.java new file mode 100644 index 0000000..8781d4d --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/domain/Home.java @@ -0,0 +1,13 @@ +package com.bwie.common.domain; + +import lombok.Data; + +@Data +public class Home { + private Integer homeId; + private String homeName; + private String homeWay; + private String homeArea; + private String homeImage; + private Double homePrice; +} diff --git a/bwie-common/src/main/java/com/bwie/common/domain/HomeVo.java b/bwie-common/src/main/java/com/bwie/common/domain/HomeVo.java new file mode 100644 index 0000000..4318b8e --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/domain/HomeVo.java @@ -0,0 +1,11 @@ +package com.bwie.common.domain; + +import lombok.Data; + +@Data +public class HomeVo extends Home{ + private Double homePriceMin; + private Double homePriceMax; + private Integer homeNum = 1; + private Integer homeSize = 3; +} diff --git a/bwie-common/src/main/java/com/bwie/common/domain/Rent.java b/bwie-common/src/main/java/com/bwie/common/domain/Rent.java new file mode 100644 index 0000000..1430328 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/domain/Rent.java @@ -0,0 +1,18 @@ +package com.bwie.common.domain; + +import lombok.Data; + +@Data +public class Rent { + private Integer rentId; + private String rentName; + private String rentSex; + private Integer rentAge; + private String rentHome; + private String rentDate; + private String rentWay; + private String rentTime; + private Double rentPrice; + private String rentState; + private String rentRemark; +} diff --git a/bwie-common/src/main/java/com/bwie/common/domain/Test.java b/bwie-common/src/main/java/com/bwie/common/domain/Test.java new file mode 100644 index 0000000..2e37521 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/domain/Test.java @@ -0,0 +1,10 @@ +package com.bwie.common.domain; + +import lombok.Data; + +@Data +public class Test { + private String value; + private String label; + +} diff --git a/bwie-common/src/main/java/com/bwie/common/domain/User.java b/bwie-common/src/main/java/com/bwie/common/domain/User.java new file mode 100644 index 0000000..b161d78 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/domain/User.java @@ -0,0 +1,15 @@ +package com.bwie.common.domain; + +import lombok.Data; + +@Data +public class User { + private Integer userId; + private String userName; + private String userSex; + private Integer userAge; + private String userUser; + private String userPwd; + private Integer userCredit; + private Integer userState; +} diff --git a/bwie-common/src/main/java/com/bwie/common/domain/response/JwtResponse.java b/bwie-common/src/main/java/com/bwie/common/domain/response/JwtResponse.java new file mode 100644 index 0000000..5d888b2 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/domain/response/JwtResponse.java @@ -0,0 +1,9 @@ +package com.bwie.common.domain.response; + +import lombok.Data; + +@Data +public class JwtResponse { + private String token; + private String existTime; +} diff --git a/bwie-common/src/main/java/com/bwie/common/exception/Exception.java b/bwie-common/src/main/java/com/bwie/common/exception/Exception.java new file mode 100644 index 0000000..7928036 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/exception/Exception.java @@ -0,0 +1,22 @@ +package com.bwie.common.exception; + +import com.bwie.common.result.Result; +import lombok.extern.log4j.Log4j2; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@Log4j2 +@RestControllerAdvice +public class Exception { + + @ExceptionHandler(java.lang.Exception.class) + public Result exceptionHandler(Throwable e){ + StackTraceElement stackTraceElement = e.getStackTrace()[0]; + String className = stackTraceElement.getClassName(); + int lineNumber = stackTraceElement.getLineNumber(); + String methodName = stackTraceElement.getMethodName(); + log.info("类名: "+className+" , 方法: "+methodName+" , 行数: "+lineNumber+" , 原因: "+e.getMessage()); + return Result.error("类名: "+className+" , 方法: "+methodName+" , 行数: "+lineNumber+" , 原因: "+e.getMessage()); + } + +} diff --git a/bwie-common/src/main/java/com/bwie/common/result/PageResult.java b/bwie-common/src/main/java/com/bwie/common/result/PageResult.java new file mode 100644 index 0000000..b33d824 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/result/PageResult.java @@ -0,0 +1,31 @@ +package com.bwie.common.result; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + + +@Data +public class PageResult implements Serializable { + /** + * 总条数 + */ + private long total; + /** + * 结果集合 + */ + private List list; + public PageResult() { + } + public PageResult(long total, List list) { + this.total = total; + this.list = list; + } + public static PageResult toPageResult(long total, List list){ + return new PageResult(total , list); + } + public static Result> toResult(long total, List list){ + return Result.success(PageResult.toPageResult(total,list)); + } +} diff --git a/bwie-common/src/main/java/com/bwie/common/result/Result.java b/bwie-common/src/main/java/com/bwie/common/result/Result.java new file mode 100644 index 0000000..52a00df --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/result/Result.java @@ -0,0 +1,73 @@ +package com.bwie.common.result; + +import com.bwie.common.constants.Constants; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class Result implements Serializable { + + private static final long serialVersionUID = 1L; + /** + * 成功 + */ + public static final int SUCCESS = Constants.SUCCESS; + /** + * 失败 + */ + public static final int FAIL = Constants.ERROR; + /** + * 返回状态码 + */ + private int code; + /** + * 响应信息 + */ + private String msg; + /** + * 响应数据 + */ + private T data; + + public static Result success() { + return restResult(null, SUCCESS, Constants.SUCCESS_MSG); + } + + public static Result success(T data) { + return restResult(data, SUCCESS, Constants.SUCCESS_MSG); + } + + public static Result success(T data, String msg) { + return restResult(data, SUCCESS, msg); + } + + public static Result error() { + return restResult(null, FAIL, Constants.ERROR_MSG); + } + + public static Result error(String msg) { + return restResult(null, FAIL, msg); + } + + public static Result error(T data) { + return restResult(data, FAIL, Constants.ERROR_MSG); + } + + public static Result error(T data, String msg) { + return restResult(data, FAIL, msg); + } + + public static Result error(int code, String msg) { + return restResult(null, code, msg); + } + + private static Result restResult(T data, int code, String msg) { + Result apiResult = new Result<>(); + apiResult.setCode(code); + apiResult.setData(data); + apiResult.setMsg(msg); + return apiResult; + } +} diff --git a/bwie-common/src/main/java/com/bwie/common/utils/IpUtils.java b/bwie-common/src/main/java/com/bwie/common/utils/IpUtils.java new file mode 100644 index 0000000..12a0d3c --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/utils/IpUtils.java @@ -0,0 +1,308 @@ +package com.bwie.common.utils; + +import javax.servlet.http.HttpServletRequest; +import java.net.InetAddress; +import java.net.UnknownHostException; + + +public class IpUtils { + public final static String REGX_0_255 = "(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)"; + // 匹配 ip + public final static String REGX_IP = "((" + REGX_0_255 + "\\.){3}" + REGX_0_255 + ")"; + public final static String REGX_IP_WILDCARD = "(((\\*\\.){3}\\*)|(" + REGX_0_255 + "(\\.\\*){3})|(" + REGX_0_255 + "\\." + REGX_0_255 + ")(\\.\\*){2}" + "|((" + REGX_0_255 + "\\.){3}\\*))"; + // 匹配网段 + public final static String REGX_IP_SEG = "(" + REGX_IP + "\\-" + REGX_IP + ")"; + + /** + * 获取客户端IP + * + * @param request 请求对象 + * @return IP地址 + */ + public static String getIpAddr(HttpServletRequest request) { + if (request == null) { + return "unknown"; + } + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Forwarded-For"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Real-IP"); + } + + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + + return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip); + } + + /** + * 检查是否为内部IP地址 + * + * @param ip IP地址 + * @return 结果 + */ + public static boolean internalIp(String ip) { + byte[] addr = textToNumericFormatV4(ip); + return internalIp(addr) || "127.0.0.1".equals(ip); + } + + /** + * 检查是否为内部IP地址 + * + * @param addr byte地址 + * @return 结果 + */ + private static boolean internalIp(byte[] addr) { + if (StringUtils.isNull(addr) || addr.length < 2) { + return true; + } + final byte b0 = addr[0]; + final byte b1 = addr[1]; + // 10.x.x.x/8 + final byte SECTION_1 = 0x0A; + // 172.16.x.x/12 + final byte SECTION_2 = (byte) 0xAC; + final byte SECTION_3 = (byte) 0x10; + final byte SECTION_4 = (byte) 0x1F; + // 192.168.x.x/16 + final byte SECTION_5 = (byte) 0xC0; + final byte SECTION_6 = (byte) 0xA8; + switch (b0) { + case SECTION_1: + return true; + case SECTION_2: + if (b1 >= SECTION_3 && b1 <= SECTION_4) { + return true; + } + case SECTION_5: + switch (b1) { + case SECTION_6: + return true; + } + default: + return false; + } + } + + /** + * 将IPv4地址转换成字节 + * + * @param text IPv4地址 + * @return byte 字节 + */ + public static byte[] textToNumericFormatV4(String text) { + if (text.length() == 0) { + return null; + } + + byte[] bytes = new byte[4]; + String[] elements = text.split("\\.", -1); + try { + long l; + int i; + switch (elements.length) { + case 1: + l = Long.parseLong(elements[0]); + if ((l < 0L) || (l > 4294967295L)) { + return null; + } + bytes[0] = (byte) (int) (l >> 24 & 0xFF); + bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 2: + l = Integer.parseInt(elements[0]); + if ((l < 0L) || (l > 255L)) { + return null; + } + bytes[0] = (byte) (int) (l & 0xFF); + l = Integer.parseInt(elements[1]); + if ((l < 0L) || (l > 16777215L)) { + return null; + } + bytes[1] = (byte) (int) (l >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 3: + for (i = 0; i < 2; ++i) { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) { + return null; + } + bytes[i] = (byte) (int) (l & 0xFF); + } + l = Integer.parseInt(elements[2]); + if ((l < 0L) || (l > 65535L)) { + return null; + } + bytes[2] = (byte) (int) (l >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 4: + for (i = 0; i < 4; ++i) { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) { + return null; + } + bytes[i] = (byte) (int) (l & 0xFF); + } + break; + default: + return null; + } + } catch (NumberFormatException e) { + return null; + } + return bytes; + } + + /** + * 获取IP地址 + * + * @return 本地IP地址 + */ + public static String getHostIp() { + try { + return InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + } + return "127.0.0.1"; + } + + /** + * 获取主机名 + * + * @return 本地主机名 + */ + public static String getHostName() { + try { + return InetAddress.getLocalHost().getHostName(); + } catch (UnknownHostException e) { + } + return "未知"; + } + + /** + * 从多级反向代理中获得第一个非unknown IP地址 + * + * @param ip 获得的IP地址 + * @return 第一个非unknown IP地址 + */ + public static String getMultistageReverseProxyIp(String ip) { + // 多级反向代理检测 + if (ip != null && ip.indexOf(",") > 0) { + final String[] ips = ip.trim().split(","); + for (String subIp : ips) { + if (false == isUnknown(subIp)) { + ip = subIp; + break; + } + } + } + return StringUtils.substring(ip, 0, 255); + } + + /** + * 检测给定字符串是否为未知,多用于检测HTTP请求相关 + * + * @param checkString 被检测的字符串 + * @return 是否未知 + */ + public static boolean isUnknown(String checkString) { + return StringUtils.isBlank(checkString) || "unknown".equalsIgnoreCase(checkString); + } + + /** + * 是否为IP + */ + public static boolean isIP(String ip) { + return StringUtils.isNotBlank(ip) && ip.matches(REGX_IP); + } + + /** + * 是否为IP,或 *为间隔的通配符地址 + */ + public static boolean isIpWildCard(String ip) { + return StringUtils.isNotBlank(ip) && ip.matches(REGX_IP_WILDCARD); + } + + /** + * 检测参数是否在ip通配符里 + */ + public static boolean ipIsInWildCardNoCheck(String ipWildCard, String ip) { + String[] s1 = ipWildCard.split("\\."); + String[] s2 = ip.split("\\."); + boolean isMatchedSeg = true; + for (int i = 0; i < s1.length && !s1[i].equals("*"); i++) { + if (!s1[i].equals(s2[i])) { + isMatchedSeg = false; + break; + } + } + return isMatchedSeg; + } + + /** + * 是否为特定格式如:“10.10.10.1-10.10.10.99”的ip段字符串 + */ + public static boolean isIPSegment(String ipSeg) { + return StringUtils.isNotBlank(ipSeg) && ipSeg.matches(REGX_IP_SEG); + } + + /** + * 判断ip是否在指定网段中 + */ + public static boolean ipIsInNetNoCheck(String iparea, String ip) { + int idx = iparea.indexOf('-'); + String[] sips = iparea.substring(0, idx).split("\\."); + String[] sipe = iparea.substring(idx + 1).split("\\."); + String[] sipt = ip.split("\\."); + long ips = 0L, ipe = 0L, ipt = 0L; + for (int i = 0; i < 4; ++i) { + ips = ips << 8 | Integer.parseInt(sips[i]); + ipe = ipe << 8 | Integer.parseInt(sipe[i]); + ipt = ipt << 8 | Integer.parseInt(sipt[i]); + } + if (ips > ipe) { + long t = ips; + ips = ipe; + ipe = t; + } + return ips <= ipt && ipt <= ipe; + } + + /** + * 校验ip是否符合过滤串规则 + * + * @param filter 过滤IP列表,支持后缀'*'通配,支持网段如:`10.10.10.1-10.10.10.99` + * @param ip 校验IP地址 + * @return boolean 结果 + */ + public static boolean isMatchedIp(String filter, String ip) { + if (StringUtils.isEmpty(filter) || StringUtils.isEmpty(ip)) { + return false; + } + String[] ips = filter.split(";"); + for (String iStr : ips) { + if (isIP(iStr) && iStr.equals(ip)) { + return true; + } else if (isIpWildCard(iStr) && ipIsInWildCardNoCheck(iStr, ip)) { + return true; + } else if (isIPSegment(iStr) && ipIsInNetNoCheck(iStr, ip)) { + return true; + } + } + return false; + } +} diff --git a/bwie-common/src/main/java/com/bwie/common/utils/JwtUtils.java b/bwie-common/src/main/java/com/bwie/common/utils/JwtUtils.java new file mode 100644 index 0000000..cf4e119 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/utils/JwtUtils.java @@ -0,0 +1,106 @@ +package com.bwie.common.utils; + +import com.bwie.common.constants.JwtConstants; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; + +import java.util.Map; + + +public class JwtUtils { + + /** + * 秘钥 + */ + public static String secret = JwtConstants.SECRET; + + /** + * 从数据声明生成令牌 + * + * @param claims 数据声明 + * @return 令牌 + */ + public static String createToken(Map claims){ + String token = Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, secret).compact(); + return token; + } + + /** + * 从令牌中获取数据声明 + * + * @param token 令牌 + * @return 数据声明 + */ + public static Claims parseToken(String token){ + return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody(); + } + /** + * 根据令牌获取用户标识 + * + * @param token 令牌 + * @return 用户ID + */ + public static String getUserKey(String token){ + Claims claims = parseToken(token); + return getValue(claims, JwtConstants.USER_KEY); + } + /** + * 根据令牌获取用户标识 + * + * @param claims 身份信息 + * @return 用户ID + */ + public static String getUserKey(Claims claims){ + return getValue(claims, JwtConstants.USER_KEY); + } + /** + * 根据令牌获取用户ID + * + * @param token 令牌 + * @return 用户ID + */ + public static String getUserId(String token){ + Claims claims = parseToken(token); + return getValue(claims, JwtConstants.DETAILS_USER_ID); + } + /** + * 根据身份信息获取用户ID + * + * @param claims 身份信息 + * @return 用户ID + */ + public static String getUserId(Claims claims){ + return getValue(claims, JwtConstants.DETAILS_USER_ID); + } + /** + * 根据令牌获取用户名 + * + * @param token 令牌 + * @return 用户名 + */ + public static String getUserName(String token){ + Claims claims = parseToken(token); + return getValue(claims, JwtConstants.DETAILS_USERNAME); + } + /** + * 根据身份信息获取用户名 + * + * @param claims 身份信息 + * @return 用户名 + */ + public static String getUserName(Claims claims){ + return getValue(claims, JwtConstants.DETAILS_USERNAME); + } + /** + * 根据身份信息获取键值 + * + * @param claims 身份信息 + * @param key 键 + * @return 值 + */ + public static String getValue(Claims claims, String key){ + Object obj = claims.get(key); + return obj == null ? "" : obj.toString(); + } +} diff --git a/bwie-common/src/main/java/com/bwie/common/utils/StringUtils.java b/bwie-common/src/main/java/com/bwie/common/utils/StringUtils.java new file mode 100644 index 0000000..162c33e --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/utils/StringUtils.java @@ -0,0 +1,65 @@ +package com.bwie.common.utils; + +import org.springframework.util.AntPathMatcher; + +import java.util.Collection; +import java.util.List; + + +public class StringUtils extends org.apache.commons.lang3.StringUtils { + + /** + * * 判断一个对象是否为空 + * + * @param object Object + * @return true:为空 false:非空 + */ + public static boolean isNull(Object object) { + return object == null; + } + + /** + * * 判断一个Collection是否为空, 包含List,Set,Queue + * + * @param coll 要判断的Collection + * @return true:为空 false:非空 + */ + public static boolean isEmpty(Collection coll) { + return isNull(coll) || coll.isEmpty(); + } + + /** + * 查找指定字符串是否匹配指定字符串列表中的任意一个字符串 + * + * @param str 指定字符串 + * @param strs 需要检查的字符串数组 + * @return 是否匹配 + */ + public static boolean matches(String str, List strs) { + if (isEmpty(str) || isEmpty(strs)) { + return false; + } + for (String pattern : strs) { + if (isMatch(pattern, str)) + { + return true; + } + } + return false; + } + + /** + * 判断url是否与规则配置: + * ? 表示单个字符; + * * 表示一层路径内的任意字符串,不可跨层级; + * ** 表示任意层路径; + * + * @param pattern 匹配规则 + * @param url 需要匹配的url + * @return + */ + public static boolean isMatch(String pattern, String url) { + AntPathMatcher matcher = new AntPathMatcher(); + return matcher.match(pattern, url); + } +} diff --git a/bwie-common/src/main/java/com/bwie/common/utils/TelSmsUtils.java b/bwie-common/src/main/java/com/bwie/common/utils/TelSmsUtils.java new file mode 100644 index 0000000..7accf0e --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/utils/TelSmsUtils.java @@ -0,0 +1,88 @@ +package com.bwie.common.utils; + +import com.alibaba.fastjson.JSONObject; +import com.aliyun.dysmsapi20170525.Client; +import com.aliyun.dysmsapi20170525.models.SendSmsRequest; +import com.aliyun.dysmsapi20170525.models.SendSmsResponse; +import com.aliyun.teaopenapi.models.Config; +import lombok.extern.log4j.Log4j2; + +import java.util.Map; + +/** + * 短信工具类 + */ +@Log4j2 +public class TelSmsUtils { + + /** + * 阿里云主账号AccessKey,accessKeySecret拥有所有API的访问权限 + */ + private static String accessKeyId = "LTAI5tQWdAodc1EJ1doShoW4"; + private static String accessKeySecret = "9MbfDBJ3Efqc6iN5yPFX0zq3ZErsII"; + private static String templateCode = "SMS0001"; + + /** + * 短信访问域名 + */ + private static String endpoint = "dysmsapi.aliyuncs.com"; + /** + * 短信签名 + */ + private static String signName = "登录验证"; + + /** + * 实例化短信对象 + */ + private static Client client; + + static { + log.info("初始化短信服务开始"); + long startTime = System.currentTimeMillis(); + try { + client = initClient(); + log.info("初始化短信成功:{}",signName); + } catch (Exception e) { + e.printStackTrace(); + } + log.info("初始化短信服务结束:耗时:{}MS",(System.currentTimeMillis()-startTime)); + } + /** + * 初始化短信对象 + * @return + * @throws Exception + */ + private static Client initClient() throws Exception{ + Config config = new Config() + // 您的AccessKey ID + .setAccessKeyId(accessKeyId) + // 您的AccessKey Secret + .setAccessKeySecret(accessKeySecret); + // 访问的域名 + config.endpoint = endpoint; + return new Client(config); + } + + /** + * 发送单条短信 + * @param tel + * @param templateCode SMS_153991546 + * @param sendDataMap + */ + public static String sendSms(String tel, String templateCode,Map sendDataMap){ + SendSmsRequest sendSmsRequest = new SendSmsRequest() + .setPhoneNumbers(tel) + .setSignName(signName) + .setTemplateCode(templateCode) + .setTemplateParam(JSONObject.toJSONString(sendDataMap)); + SendSmsResponse sendSmsResponse = null; + try { + log.info("发送短信验证码:消息内容是:【{}】", JSONObject.toJSONString(sendDataMap)); + sendSmsResponse = client.sendSms(sendSmsRequest); + } catch (Exception e) { + log.error("短信发送异常,手机号:【{}】,短信内容:【{}】,异常信息:【{}】", tel, sendDataMap, e); + } + return JSONObject.toJSONString(sendSmsResponse.getBody()); + } + +} diff --git a/bwie-gateway/pom.xml b/bwie-gateway/pom.xml new file mode 100644 index 0000000..4c0d68c --- /dev/null +++ b/bwie-gateway/pom.xml @@ -0,0 +1,44 @@ + + + 4.0.0 + + com.bwie + exam-week-0730 + 1.0-SNAPSHOT + + + bwie-gateway + + + 17 + 17 + UTF-8 + + + + + + com.bwie + bwie-common + + + + + org.springframework.cloud + spring-cloud-starter-gateway + + + + com.alibaba.cloud + spring-cloud-alibaba-sentinel-gateway + + + + com.alibaba.csp + sentinel-spring-cloud-gateway-adapter + + + + diff --git a/bwie-gateway/src/main/java/com/bwie/GatewayApplication.java b/bwie-gateway/src/main/java/com/bwie/GatewayApplication.java new file mode 100644 index 0000000..f4ca2f2 --- /dev/null +++ b/bwie-gateway/src/main/java/com/bwie/GatewayApplication.java @@ -0,0 +1,11 @@ +package com.bwie; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class GatewayApplication { + public static void main(String[] args) { + SpringApplication.run(GatewayApplication.class,args); + } +} diff --git a/bwie-gateway/src/main/java/com/bwie/gateway/config/IgnoreWhiteConfig.java b/bwie-gateway/src/main/java/com/bwie/gateway/config/IgnoreWhiteConfig.java new file mode 100644 index 0000000..eea0d7c --- /dev/null +++ b/bwie-gateway/src/main/java/com/bwie/gateway/config/IgnoreWhiteConfig.java @@ -0,0 +1,29 @@ +package com.bwie.gateway.config; + +import com.alibaba.fastjson.JSONObject; +import lombok.Data; +import lombok.extern.log4j.Log4j2; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +import java.util.ArrayList; +import java.util.List; + + +@Configuration +@RefreshScope +@ConfigurationProperties(prefix = "ignore") +@Data +@Log4j2 +public class IgnoreWhiteConfig { + /** + * 放行白名单配置,网关不校验此处的白名单 + */ + private List whites = new ArrayList<>(); + + public void setWhites(List whites) { + log.info("加载网关路径白名单:{}", JSONObject.toJSONString(whites)); + this.whites = whites; + } +} diff --git a/bwie-gateway/src/main/java/com/bwie/gateway/filters/AuthFilter.java b/bwie-gateway/src/main/java/com/bwie/gateway/filters/AuthFilter.java new file mode 100644 index 0000000..330cd46 --- /dev/null +++ b/bwie-gateway/src/main/java/com/bwie/gateway/filters/AuthFilter.java @@ -0,0 +1,60 @@ +package com.bwie.gateway.filters; + +import com.bwie.common.constants.TokenConstants; +import com.bwie.common.utils.JwtUtils; +import com.bwie.common.utils.StringUtils; +import com.bwie.gateway.config.IgnoreWhiteConfig; +import com.bwie.gateway.utils.GatewayUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.Ordered; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +import java.util.List; +import java.util.concurrent.TimeUnit; + + +@Component +public class AuthFilter implements GlobalFilter, Ordered { + @Autowired + private IgnoreWhiteConfig ignoreWhiteConfig; + @Autowired + private StringRedisTemplate redisTemplate; + + @Override + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + List whites = ignoreWhiteConfig.getWhites(); + ServerHttpRequest request = exchange.getRequest(); + String path = request.getURI().getPath(); + if (StringUtils.matches(path,whites)){ + return chain.filter(exchange); + } + String token = request.getHeaders().getFirst(TokenConstants.TOKEN); + if (StringUtils.isBlank(token)){ + return GatewayUtils.errorResponse(exchange,"无权访问"); + } + try{ + JwtUtils.parseToken(token); + }catch (Exception e){ + return GatewayUtils.errorResponse(exchange,"token不合法"); + } + String userKey = JwtUtils.getUserKey(token); + if (!redisTemplate.hasKey(TokenConstants.LOGIN_TOKEN_KEY+userKey)){ + return GatewayUtils.errorResponse(exchange,"token过期"); + }else { + //续期Token到15分钟 + redisTemplate.expire(TokenConstants.LOGIN_TOKEN_KEY+userKey,15, TimeUnit.MINUTES); + } + return chain.filter(exchange); + } + + @Override + public int getOrder() { + return 0; + } +} diff --git a/bwie-gateway/src/main/java/com/bwie/gateway/utils/GatewayUtils.java b/bwie-gateway/src/main/java/com/bwie/gateway/utils/GatewayUtils.java new file mode 100644 index 0000000..cf24c5e --- /dev/null +++ b/bwie-gateway/src/main/java/com/bwie/gateway/utils/GatewayUtils.java @@ -0,0 +1,95 @@ +package com.bwie.gateway.utils; + +import com.alibaba.fastjson.JSONObject; +import com.bwie.common.result.Result; +import com.bwie.common.utils.StringUtils; +import lombok.extern.log4j.Log4j2; +import org.springframework.core.io.buffer.DataBuffer; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + + +@Log4j2 +public class GatewayUtils { + /** + * 添加请求头参数 + * @param mutate 修改对象 + * @param key 键 + * @param value 值 + */ + public static void addHeader(ServerHttpRequest.Builder mutate, String key, Object value) { + if (StringUtils.isEmpty(key)){ + log.warn("添加请求头参数键不可以为空"); + return; + } + if (value == null) { + log.warn("添加请求头参数:[{}]值为空",key); + return; + } + String valueStr = value.toString(); + mutate.header(key, valueStr); + log.info("添加请求头参数成功 - 键:[{}] , 值:[{}]", key , value); + } + + /** + * 删除请求头参数 + * @param mutate 修改对象 + * @param key 键 + */ + public static void removeHeader(ServerHttpRequest.Builder mutate, String key) { + if (StringUtils.isEmpty(key)){ + log.warn("删除请求头参数键不可以为空"); + return; + } + mutate.headers(httpHeaders -> httpHeaders.remove(key)).build(); + log.info("删除请求头参数 - 键:[{}]",key); + } + + /** + * 错误结果响应 + * @param exchange 响应上下文 + * @param msg 响应消息 + * @return + */ + public static Mono errorResponse(ServerWebExchange exchange, String msg, HttpStatus httpStatus) { + ServerHttpResponse response = exchange.getResponse(); + //设置HTTP响应头状态 + response.setStatusCode(httpStatus); + //设置HTTP响应头文本格式 + response.getHeaders().add(HttpHeaders.CONTENT_TYPE, "application/json"); + //定义响应内容 + Result result = Result.error(msg); + String resultJson = JSONObject.toJSONString(result); + log.error("[鉴权异常处理]请求路径:[{}],异常信息:[{}],响应结果:[{}]", exchange.getRequest().getPath(), msg, resultJson); + DataBuffer dataBuffer = response.bufferFactory().wrap(resultJson.getBytes()); + //进行响应 + return response.writeWith(Mono.just(dataBuffer)); + } + + /** + * 错误结果响应 + * @param exchange 响应上下文 + * @param msg 响应消息 + * @return + */ + public static Mono errorResponse(ServerWebExchange exchange, String msg) { + ServerHttpResponse response = exchange.getResponse(); + //设置HTTP响应头状态 + response.setStatusCode(HttpStatus.OK); + //设置HTTP响应头文本格式 + response.getHeaders().add(HttpHeaders.CONTENT_TYPE, "application/json"); + //定义响应内容 + Result result = Result.error(msg); + String resultJson = JSONObject.toJSONString(result); + log.error("[鉴权异常处理]请求路径:[{}],异常信息:[{}],响应结果:[{}]", exchange.getRequest().getPath(), msg, resultJson); + DataBuffer dataBuffer = response.bufferFactory().wrap(resultJson.getBytes()); + //进行响应 + return response.writeWith(Mono.just(dataBuffer)); + } + + +} diff --git a/bwie-gateway/src/main/resources/bootstrap.yml b/bwie-gateway/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..00f95a3 --- /dev/null +++ b/bwie-gateway/src/main/resources/bootstrap.yml @@ -0,0 +1,31 @@ +# Tomcat +server: + port: 18080 +# Spring +spring: + application: + # 应用名称 + name: bwie-gateway + profiles: + # 环境配置 + active: dev + main: + # 允许使用循环引用 + allow-circular-references: true + # 允许定义相同的bean对象 去覆盖原有的 + allow-bean-definition-overriding: true + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 106.54.42.224:8848 + namespace: fea09e77-e454-404c-b4d1-e53e5acee562 + config: + # 配置中心地址 + server-addr: 106.54.42.224:8848 + namespace: fea09e77-e454-404c-b4d1-e53e5acee562 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} diff --git a/bwie-modules/bwie-mq/pom.xml b/bwie-modules/bwie-mq/pom.xml new file mode 100644 index 0000000..55e04bf --- /dev/null +++ b/bwie-modules/bwie-mq/pom.xml @@ -0,0 +1,38 @@ + + + 4.0.0 + + com.bwie + bwie-modules + 1.0-SNAPSHOT + + + bwie-mq + + + 17 + 17 + UTF-8 + + + + + com.bwie + bwie-common + 1.0-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-amqp + + + + + diff --git a/bwie-modules/bwie-mq/src/main/java/com/bwie/MqApplication.java b/bwie-modules/bwie-mq/src/main/java/com/bwie/MqApplication.java new file mode 100644 index 0000000..9d290cd --- /dev/null +++ b/bwie-modules/bwie-mq/src/main/java/com/bwie/MqApplication.java @@ -0,0 +1,13 @@ +package com.bwie; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import javax.swing.*; + +@SpringBootApplication +public class MqApplication { + public static void main(String[] args) { + SpringApplication.run(MqApplication.class,args); + } +} diff --git a/bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/config/ConfirmCallbackConfig.java b/bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/config/ConfirmCallbackConfig.java new file mode 100644 index 0000000..d025002 --- /dev/null +++ b/bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/config/ConfirmCallbackConfig.java @@ -0,0 +1,40 @@ +package com.bwie.rabbitmq.config; + +import org.springframework.amqp.rabbit.connection.CorrelationData; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + + +@Component +public class ConfirmCallbackConfig implements RabbitTemplate.ConfirmCallback { + + @Autowired + private RabbitTemplate rabbitTemplate; + + /** + * 当前bean初始化的时候执行 + */ + @PostConstruct + public void init() { + this.rabbitTemplate.setConfirmCallback(this); + } + + /** + * 确认方法 + * @param correlationData correlation data for the callback. + * @param ack true for ack, false for nack + * @param cause An optional cause, for nack, when available, otherwise null. + */ + @Override + public void confirm(CorrelationData correlationData, boolean ack, String cause) { + if (ack) { + System.out.println("消息发送到 broker 成功"); + } else { + System.out.println("消息发送到 broker 失败,失败的原因:" + cause); + } + } + +} diff --git a/bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/config/RabbitAdminConfig.java b/bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/config/RabbitAdminConfig.java new file mode 100644 index 0000000..42dca5e --- /dev/null +++ b/bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/config/RabbitAdminConfig.java @@ -0,0 +1,50 @@ +package com.bwie.rabbitmq.config; + +import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 构建 RabbitAdmin + */ +@Configuration +public class RabbitAdminConfig { + + @Value("${spring.rabbitmq.host}") + private String host; + @Value("${spring.rabbitmq.username}") + private String username; + @Value("${spring.rabbitmq.password}") + private String password; + @Value("${spring.rabbitmq.virtual-host}") + private String virtualhost; + + @Bean + public ConnectionFactory connectionFactory() { + CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); + connectionFactory.setAddresses(host); + connectionFactory.setUsername(username); + connectionFactory.setPassword(password); + connectionFactory.setVirtualHost(virtualhost); + // 配置发送确认回调时,次配置必须配置,否则即使在RabbitTemplate配置了ConfirmCallback也不会生效 + connectionFactory.setPublisherConfirmType(CachingConnectionFactory.ConfirmType.CORRELATED); + connectionFactory.setPublisherReturns(true); + return connectionFactory; + } + + + /** + * rabbitAdmin + * @param connectionFactory + * @return + */ + @Bean + public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) { + RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory); + rabbitAdmin.setAutoStartup(true); + return rabbitAdmin; + } +} diff --git a/bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/config/RabbitmqConfig.java b/bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/config/RabbitmqConfig.java new file mode 100644 index 0000000..f57379c --- /dev/null +++ b/bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/config/RabbitmqConfig.java @@ -0,0 +1,15 @@ +package com.bwie.rabbitmq.config; + +import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; +import org.springframework.amqp.support.converter.MessageConverter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class RabbitmqConfig { + // 消息转换配置 + @Bean + public MessageConverter jsonMessageConverter(){ + return new Jackson2JsonMessageConverter(); + } +} diff --git a/bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/config/ReturnsCallbackConfig.java b/bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/config/ReturnsCallbackConfig.java new file mode 100644 index 0000000..8d8de0f --- /dev/null +++ b/bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/config/ReturnsCallbackConfig.java @@ -0,0 +1,37 @@ +package com.bwie.rabbitmq.config; + +import org.springframework.amqp.core.ReturnedMessage; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + + +@Component +public class ReturnsCallbackConfig implements RabbitTemplate.ReturnsCallback { + + @Autowired + private RabbitTemplate rabbitTemplate; + + /** + * 当前bean初始化的时候执行 + */ + @PostConstruct + public void init() { + this.rabbitTemplate.setReturnsCallback(this); + } + + /** + * 消息发送达到 queue 失败执行 + * + * @param returnedMessage the returned message and metadata. + */ + @Override + public void returnedMessage(ReturnedMessage returnedMessage) { + System.out.println("消息" + returnedMessage.getMessage().toString() + + "被交换机" + returnedMessage.getExchange() + "回退!" + + "退回原因为:" + returnedMessage.getReplyText()); + // TODO 回退了所有的信息,可做补偿机制 + } +} diff --git a/bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/consumer/MsgConsumer.java b/bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/consumer/MsgConsumer.java new file mode 100644 index 0000000..b4dd68b --- /dev/null +++ b/bwie-modules/bwie-mq/src/main/java/com/bwie/rabbitmq/consumer/MsgConsumer.java @@ -0,0 +1,30 @@ +package com.bwie.rabbitmq.consumer; + +import com.bwie.common.domain.User; +import com.rabbitmq.client.Channel; +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +@Component +@Log4j2 +public class MsgConsumer { + @RabbitListener(queuesToDeclare = {@Queue("send_msg")}) + public void sendMsg(String str, Message message, Channel channel){ + try { + log.info("消费者消费消息:{}",str); + channel.basicAck(message.getMessageProperties().getDeliveryTag(),false); + } catch (IOException e) { + try { + channel.basicReject(message.getMessageProperties().getDeliveryTag(),true); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + } +} diff --git a/bwie-modules/bwie-mq/src/main/resources/bootstrap.yml b/bwie-modules/bwie-mq/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..d69577e --- /dev/null +++ b/bwie-modules/bwie-mq/src/main/resources/bootstrap.yml @@ -0,0 +1,45 @@ +# Tomcat +server: + port: 9006 +# Spring +spring: + rabbitmq: + host: 106.54.42.224 + port: 5672 + username: guest + password: guest + virtual-host: / + listener: + simple: + prefetch: 1 # 默认每次取出一条消息消费, 消费完成取下一条 + acknowledge-mode: manual # 设置消费端手动ack确认 + retry: + enabled: true # 是否支持重试 + publisher-confirm-type: correlated #确认消息已发送到交换机(Exchange) + publisher-returns: true #确认消息已发送到队列(Queue) + main: + allow-circular-references: true + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + application: + # 应用名称 + name: bwie-rabbitmq + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 106.54.42.224:8848 + config: + # 配置中心地址 + server-addr: 106.54.42.224:8848 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + redis: + host: 106.54.42.224 diff --git a/bwie-modules/bwie-system/pom.xml b/bwie-modules/bwie-system/pom.xml new file mode 100644 index 0000000..a81cd97 --- /dev/null +++ b/bwie-modules/bwie-system/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.bwie + bwie-modules + 1.0-SNAPSHOT + + + bwie-system + + + 17 + 17 + UTF-8 + + + + + + com.bwie + bwie-common + + + + org.springframework.boot + spring-boot-starter-web + + + + com.alibaba + druid-spring-boot-starter + 1.2.8 + + + + mysql + mysql-connector-java + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.2.2 + + + + com.github.pagehelper + pagehelper-spring-boot-starter + 1.4.1 + + + + org.springframework.boot + spring-boot-starter-test + test + + + com.github.tobato + fastdfs-client + 1.26.5 + + + + diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/SystemApplication.java b/bwie-modules/bwie-system/src/main/java/com/bwie/SystemApplication.java new file mode 100644 index 0000000..fd76903 --- /dev/null +++ b/bwie-modules/bwie-system/src/main/java/com/bwie/SystemApplication.java @@ -0,0 +1,17 @@ +package com.bwie; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.scheduling.annotation.EnableScheduling; + +@SpringBootApplication +@MapperScan("com.bwie.system.mapper") +@EnableFeignClients +@EnableScheduling +public class SystemApplication { + public static void main(String[] args) { + SpringApplication.run(SystemApplication.class,args); + } +} diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/config/FastConfig.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/config/FastConfig.java new file mode 100644 index 0000000..3cea992 --- /dev/null +++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/config/FastConfig.java @@ -0,0 +1,13 @@ +package com.bwie.system.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.EnableMBeanExport; +import org.springframework.jmx.support.RegistrationPolicy; + + +@Configuration +// 解决 jmx 重复注册 bean 的问题 +@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING) +public class FastConfig { + +} diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/config/FastUtil.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/config/FastUtil.java new file mode 100644 index 0000000..6876f2e --- /dev/null +++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/config/FastUtil.java @@ -0,0 +1,50 @@ +package com.bwie.system.config; + +import org.springframework.stereotype.Component; +import com.github.tobato.fastdfs.domain.fdfs.StorePath; +import com.github.tobato.fastdfs.service.FastFileStorageClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; + + +@Component +public class FastUtil { + private static final Logger log = LoggerFactory.getLogger(FastUtil.class); + + @Resource + private FastFileStorageClient storageClient ; + + /** + * 上传文件 + */ + public String upload(MultipartFile multipartFile) throws Exception { + String originalFilename = multipartFile.getOriginalFilename(). + substring(multipartFile.getOriginalFilename(). + lastIndexOf(".") + 1); + StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage( + multipartFile.getInputStream(), + multipartFile.getSize(),originalFilename , null); + return storePath.getFullPath() ; + } + /** + * 删除文件 + */ + public String deleteFile(String fileUrl) { + if (StringUtils.isEmpty(fileUrl)) { + log.info("fileUrl == >>文件路径为空..."); + return "文件路径不能为空"; + } + try { + StorePath storePath = StorePath.parseFromUrl(fileUrl); + storageClient.deleteFile(storePath.getGroup(), storePath.getPath()); + } catch (Exception e) { + log.error(e.getMessage()); + } + return "删除成功"; + } + +} diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/config/InitEsRes.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/config/InitEsRes.java new file mode 100644 index 0000000..7c8239c --- /dev/null +++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/config/InitEsRes.java @@ -0,0 +1,26 @@ +package com.bwie.system.config;//package com.bwie.loginlog.config; +// +//import lombok.Data; +//import org.apache.http.HttpHost; +//import org.elasticsearch.client.RestClient; +//import org.elasticsearch.client.RestHighLevelClient; +//import org.springframework.boot.context.properties.ConfigurationProperties; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +//@Configuration +//@ConfigurationProperties(prefix = "es") +//@Data +//public class InitEsRes { +// private String host; +// private int port; +// private String scheme; +// +// @Bean +// public RestHighLevelClient +// restHighLevelClient(){ +// return new RestHighLevelClient( +// RestClient.builder(new HttpHost(host,port,scheme)) +// ); +// } +//} diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/controller/HomeController.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/controller/HomeController.java new file mode 100644 index 0000000..ede763e --- /dev/null +++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/controller/HomeController.java @@ -0,0 +1,46 @@ +package com.bwie.system.controller; + +import com.bwie.common.domain.Home; +import com.bwie.common.domain.HomeVo; +import com.bwie.common.result.Result; +import com.bwie.system.config.FastUtil; +import com.bwie.system.service.HomeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +@RestController +@RequestMapping("/home") +public class HomeController { + + @Autowired + private HomeService homeService; + @Autowired + private FastUtil fastUtil; + + /** + * 列表查询 + * @param homeVo + * @return + */ + @PostMapping("/selectHomeList") + public Result> selectHomeList(@RequestBody HomeVo homeVo){ + return Result.success(homeService.selectHomeList(homeVo)); + } + +// @PostMapping("/upload") +// public Result upload(@RequestBody MultipartFile file){ +// try { +// String upload = fastUtil.upload(file); +// return Result.success(upload); +// } catch (Exception e) { +// throw new RuntimeException(e); +// } +// } + +} diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/controller/RentController.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/controller/RentController.java new file mode 100644 index 0000000..40fa466 --- /dev/null +++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/controller/RentController.java @@ -0,0 +1,55 @@ +package com.bwie.system.controller; + +import com.bwie.common.domain.Rent; +import com.bwie.common.result.Result; +import com.bwie.system.service.RentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/rent") +public class RentController { + + @Autowired + private RentService rentService; + @Autowired + private StringRedisTemplate redisTemplate; + + /** + * 判断此用户是否已经租房 + * @return + */ + @PostMapping("/selectRentByName") + public Result selectRentByName(){ + Rent rent = rentService.selectRentByName(); + if (rent==null){ + return Result.success(); + } + return Result.success("用户已经租房"); + } + + /** + * 添加 + * @param rent + * @return + */ + @PostMapping("/rentAdd") + public Result rentAdd(@RequestBody Rent rent){ + rentService.rentAdd(rent); + return Result.success(); + } + + /** + * 定时器 + */ + @Scheduled(cron = "0/30 * * * * ?") + public void scheduled(){ + rentService.updateRent(); + } + +} diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/controller/UserController.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/controller/UserController.java new file mode 100644 index 0000000..160804f --- /dev/null +++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/controller/UserController.java @@ -0,0 +1,53 @@ +package com.bwie.system.controller; + +import com.bwie.common.domain.User; +import com.bwie.common.result.Result; +import com.bwie.system.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/user") +public class UserController { + + @Autowired + private UserService userService; + + /** + * 登录 + * @param user + * @return + */ + @PostMapping("/login") + public Result login(@RequestBody User user){ + User user1 = userService.login(user); + if (user1==null){ + return Result.error(); + } + return Result.success(user1); + } + + /** + * 获取登录人 + * @return + */ + @PostMapping("/getUser") + public Result getUser(){ + return Result.success(userService.getUser()); + } + + /** + * 测试异常 + * @return + */ + @PostMapping("/exception") + public Result exception(){ + int i = 0; + int l = 10/i; + return Result.success(); + } + +} diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/mapper/HomeMapper.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/mapper/HomeMapper.java new file mode 100644 index 0000000..ba4fdea --- /dev/null +++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/mapper/HomeMapper.java @@ -0,0 +1,12 @@ +package com.bwie.system.mapper; + +import com.bwie.common.domain.Home; +import com.bwie.common.domain.HomeVo; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface HomeMapper { + List selectHomeList(HomeVo homeVo); +} diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/mapper/RentMapper.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/mapper/RentMapper.java new file mode 100644 index 0000000..f414967 --- /dev/null +++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/mapper/RentMapper.java @@ -0,0 +1,11 @@ +package com.bwie.system.mapper; + +import com.bwie.common.domain.Rent; +import org.springframework.stereotype.Repository; + +@Repository +public interface RentMapper { + Rent selectRentByName(Rent rent); + + void rentAdd(Rent rent); +} diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/mapper/UserMapper.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/mapper/UserMapper.java new file mode 100644 index 0000000..d4b0597 --- /dev/null +++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/mapper/UserMapper.java @@ -0,0 +1,9 @@ +package com.bwie.system.mapper; + +import com.bwie.common.domain.User; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserMapper { + User login(User user); +} diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/HomeService.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/HomeService.java new file mode 100644 index 0000000..70fadfd --- /dev/null +++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/HomeService.java @@ -0,0 +1,10 @@ +package com.bwie.system.service; + +import com.bwie.common.domain.Home; +import com.bwie.common.domain.HomeVo; + +import java.util.List; + +public interface HomeService { + List selectHomeList(HomeVo homeVo); +} diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/RentService.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/RentService.java new file mode 100644 index 0000000..8c9f84a --- /dev/null +++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/RentService.java @@ -0,0 +1,11 @@ +package com.bwie.system.service; + +import com.bwie.common.domain.Rent; + +public interface RentService { + Rent selectRentByName(); + + void rentAdd(Rent rent); + + void updateRent(); +} diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/UserService.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/UserService.java new file mode 100644 index 0000000..dc4c103 --- /dev/null +++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/UserService.java @@ -0,0 +1,9 @@ +package com.bwie.system.service; + +import com.bwie.common.domain.User; + +public interface UserService { + User login(User user); + + User getUser(); +} diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/impl/HomeServiceImpl.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/impl/HomeServiceImpl.java new file mode 100644 index 0000000..77a897b --- /dev/null +++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/impl/HomeServiceImpl.java @@ -0,0 +1,27 @@ +package com.bwie.system.service.impl; + +import com.bwie.common.domain.Home; +import com.bwie.common.domain.HomeVo; +import com.bwie.system.mapper.HomeMapper; +import com.bwie.system.service.HomeService; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class HomeServiceImpl implements HomeService { + + @Autowired + private HomeMapper homeMapper; + + @Override + public List selectHomeList(HomeVo homeVo) { + PageHelper.startPage(homeVo.getHomeNum(),homeVo.getHomeSize()); + List homes = homeMapper.selectHomeList(homeVo); + PageInfo pageInfo = new PageInfo(homes); + return pageInfo.getList(); + } +} diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/impl/RentServiceImpl.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/impl/RentServiceImpl.java new file mode 100644 index 0000000..38572cd --- /dev/null +++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/impl/RentServiceImpl.java @@ -0,0 +1,65 @@ +package com.bwie.system.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.nacos.api.naming.pojo.healthcheck.impl.Http; +import com.bwie.common.constants.TokenConstants; +import com.bwie.common.domain.Rent; +import com.bwie.common.domain.User; +import com.bwie.common.utils.JwtUtils; +import com.bwie.system.mapper.RentMapper; +import com.bwie.system.service.RentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; + +@Service +public class RentServiceImpl implements RentService { + + @Autowired + private RentMapper rentMapper; + @Autowired + private HttpServletRequest request; + @Autowired + private StringRedisTemplate redisTemplate; + + @Override + public Rent selectRentByName() { + String token = request.getHeader(TokenConstants.TOKEN); + String userKey = JwtUtils.getUserKey(token); + String s = redisTemplate.opsForValue().get(TokenConstants.LOGIN_TOKEN_KEY + userKey); + User user = JSONObject.parseObject(s, User.class); + Rent rent = new Rent(); + rent.setRentName(user.getUserName()); + return rentMapper.selectRentByName(rent); + } + + @Override + public void rentAdd(Rent rent) { + String token = request.getHeader(TokenConstants.TOKEN); + String userKey = JwtUtils.getUserKey(token); + String s = redisTemplate.opsForValue().get(TokenConstants.LOGIN_TOKEN_KEY + userKey); + User user = JSONObject.parseObject(s, User.class); + rent.setRentName(user.getUserName()); + rent.setRentSex(user.getUserSex()); + rent.setRentAge(user.getUserAge()); + rentMapper.rentAdd(rent); + } + + @Override + public void updateRent() { + String token = request.getHeader(TokenConstants.TOKEN); + String userKey = JwtUtils.getUserKey(token); + String s = redisTemplate.opsForValue().get(TokenConstants.LOGIN_TOKEN_KEY + userKey); + User user = JSONObject.parseObject(s, User.class); + Rent rent = new Rent(); + rent.setRentName(user.getUserName()); + Rent rent1 = rentMapper.selectRentByName(rent); + Integer userCredit = user.getUserCredit(); + Integer rentTime = Integer.valueOf(rent1.getRentTime()); + if (userCredit*rentTime < rent1.getRentPrice()){ + //审核驳回 + } + } +} diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/impl/UserServiceImpl.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..8666f58 --- /dev/null +++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/impl/UserServiceImpl.java @@ -0,0 +1,37 @@ +package com.bwie.system.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.bwie.common.constants.TokenConstants; +import com.bwie.common.domain.User; +import com.bwie.common.utils.JwtUtils; +import com.bwie.system.mapper.UserMapper; +import com.bwie.system.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; + +@Service +public class UserServiceImpl implements UserService { + + @Autowired + private UserMapper userMapper; + @Autowired + private HttpServletRequest request; + @Autowired + private StringRedisTemplate redisTemplate; + + @Override + public User login(User user) { + return userMapper.login(user); + } + + @Override + public User getUser() { + String token = request.getHeader(TokenConstants.TOKEN); + String userKey = JwtUtils.getUserKey(token); + String s = redisTemplate.opsForValue().get(TokenConstants.LOGIN_TOKEN_KEY + userKey); + return JSONObject.parseObject(s, User.class); + } +} diff --git a/bwie-modules/bwie-system/src/main/resources/bootstrap.yml b/bwie-modules/bwie-system/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..0641535 --- /dev/null +++ b/bwie-modules/bwie-system/src/main/resources/bootstrap.yml @@ -0,0 +1,51 @@ +# Tomcat +server: + port: 9002 +# Spring +spring: + main: + allow-circular-references: true + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + application: + # 应用名称 + name: bwie-system + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 106.54.42.224:8848 + namespace: fea09e77-e454-404c-b4d1-e53e5acee562 + config: + # 配置中心地址 + server-addr: 106.54.42.224:8848 + namespace: fea09e77-e454-404c-b4d1-e53e5acee562 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + +aliyun: + end-point: oss-cn-shanghai.aliyuncs.com + access-key-id: LTAI5tSFAGrms29r1xwEFtRM + access-key-secret: rztMfqxdYlsMUtIoy9bIOSGEKCWQT7 + access-pre: https://dongxiaojie.oss-cn-shanghai.aliyuncs.com + bucket-name: dongxiaojie + +fdfs: + so-timeout: 1500 # socket 连接时长 + connect-timeout: 600 # 连接 tracker 服务器超时时长 + # 这两个是你服务器的 IP 地址,注意 23000 端口也要打开,阿里云服务器记得配置安全组。tracker 要和 stroage 服务进行交流 + tracker-list: 106.54.42.224:22122 + web-server-url: 106.54.42.224:8888 + pool: + jmx-enabled: false + # 生成缩略图 + thumb-image: + height: 500 + width: 500 diff --git a/bwie-modules/bwie-system/src/main/resources/mapper/HomeMapper.xml b/bwie-modules/bwie-system/src/main/resources/mapper/HomeMapper.xml new file mode 100644 index 0000000..0a289b2 --- /dev/null +++ b/bwie-modules/bwie-system/src/main/resources/mapper/HomeMapper.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/bwie-modules/bwie-system/src/main/resources/mapper/RentMapper.xml b/bwie-modules/bwie-system/src/main/resources/mapper/RentMapper.xml new file mode 100644 index 0000000..61b79b2 --- /dev/null +++ b/bwie-modules/bwie-system/src/main/resources/mapper/RentMapper.xml @@ -0,0 +1,15 @@ + + + + + INSERT INTO `exam-week-0730`.`t_rent` + (`rent_id`, `rent_name`, `rent_sex`, `rent_age`, `rent_home`, `rent_date`, `rent_way`, `rent_time`, `rent_price`, `rent_state`, `rent_remark`) + VALUES + (0, #{rentName}, #{rentSex}, #{rentAge}, #{rentHome}, now(), #{rentWay}, #{rentTime}, #{rentPrice}, '待审核', ''); + + + diff --git a/bwie-modules/bwie-system/src/main/resources/mapper/UserMapper.xml b/bwie-modules/bwie-system/src/main/resources/mapper/UserMapper.xml new file mode 100644 index 0000000..db3cbd6 --- /dev/null +++ b/bwie-modules/bwie-system/src/main/resources/mapper/UserMapper.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/bwie-modules/pom.xml b/bwie-modules/pom.xml new file mode 100644 index 0000000..cf77ea7 --- /dev/null +++ b/bwie-modules/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + + com.bwie + exam-week-0730 + 1.0-SNAPSHOT + + + bwie-modules + pom + + bwie-system + bwie-mq + + + + 17 + 17 + UTF-8 + + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..590f953 --- /dev/null +++ b/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.bwie + exam-week-0730 + 1.0-SNAPSHOT + pom + + bwie-auth + bwie-common + bwie-gateway + bwie-modules + + + + 17 + 17 + UTF-8 + + + + + + spring-boot-starter-parent + org.springframework.boot + 2.6.2 + + + + + + + + + org.springframework.cloud + spring-cloud-dependencies + 2021.0.0 + pom + import + + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + 2021.1 + pom + import + + + + com.alibaba.nacos + nacos-client + 2.0.4 + + + + com.bwie + bwie-common + 1.0-SNAPSHOT + + + + + diff --git a/sql/exam-week-0730.sql b/sql/exam-week-0730.sql new file mode 100644 index 0000000..83b88e0 --- /dev/null +++ b/sql/exam-week-0730.sql @@ -0,0 +1,89 @@ +/* + Navicat Premium Data Transfer + + Source Server : localhost + Source Server Type : MySQL + Source Server Version : 50557 + Source Host : localhost:3306 + Source Schema : exam-week-0730 + + Target Server Type : MySQL + Target Server Version : 50557 + File Encoding : 65001 + + Date: 30/07/2024 15:47:28 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for t_home +-- ---------------------------- +DROP TABLE IF EXISTS `t_home`; +CREATE TABLE `t_home` ( + `home_id` int(11) NOT NULL AUTO_INCREMENT, + `home_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `home_way` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `home_area` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `home_image` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `home_price` decimal(10, 2) NULL DEFAULT NULL, + PRIMARY KEY (`home_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of t_home +-- ---------------------------- +INSERT INTO `t_home` VALUES (1, '通天苑', '整租', '120平方米', 'http://106.54.42.224:8888/group1/M00/00/03/CgAEDGaoY0yAbT9AAABXITVx7x8744.png', 3900.00); +INSERT INTO `t_home` VALUES (2, '南天门', '单间', '70平方米', 'http://106.54.42.224:8888/group1/M00/00/03/CgAEDGaoY0yAbT9AAABXITVx7x8744.png', 2900.00); +INSERT INTO `t_home` VALUES (3, '南苑小区', '整租', '90平方米', 'http://106.54.42.224:8888/group1/M00/00/03/CgAEDGaoY0yAbT9AAABXITVx7x8744.png', 3400.00); +INSERT INTO `t_home` VALUES (4, '海湾镇', '单间', '45平方米', 'http://106.54.42.224:8888/group1/M00/00/03/CgAEDGaoY0yAbT9AAABXITVx7x8744.png', 2200.00); + +-- ---------------------------- +-- Table structure for t_rent +-- ---------------------------- +DROP TABLE IF EXISTS `t_rent`; +CREATE TABLE `t_rent` ( + `rent_id` int(11) NOT NULL AUTO_INCREMENT, + `rent_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `rent_sex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `rent_age` int(255) NULL DEFAULT NULL, + `rent_home` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `rent_date` datetime NULL DEFAULT NULL, + `rent_way` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `rent_time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `rent_price` decimal(10, 2) NULL DEFAULT NULL, + `rent_state` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `rent_remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`rent_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of t_rent +-- ---------------------------- +INSERT INTO `t_rent` VALUES (3, '张三', '男', 18, '通天苑', '2024-07-30 15:27:24', '整租', '3', 11115.00, '待审核', ''); +INSERT INTO `t_rent` VALUES (4, '李四', '女', 19, '通天苑', '2024-07-30 15:43:50', '整租', '24', 84240.00, '待审核', ''); + +-- ---------------------------- +-- Table structure for t_user +-- ---------------------------- +DROP TABLE IF EXISTS `t_user`; +CREATE TABLE `t_user` ( + `user_id` int(11) NOT NULL AUTO_INCREMENT, + `user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `user_sex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `user_age` int(11) NULL DEFAULT NULL, + `user_user` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `user_pwd` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `user_credit` int(11) NULL DEFAULT NULL, + `user_state` int(11) NULL DEFAULT NULL, + PRIMARY KEY (`user_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of t_user +-- ---------------------------- +INSERT INTO `t_user` VALUES (1, '张三', '男', 18, 'admin1', 'admin', 100, 0); +INSERT INTO `t_user` VALUES (2, '李四', '女', 19, 'admin2', 'admin', 100, 0); + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/理论/img.png b/理论/img.png new file mode 100644 index 0000000000000000000000000000000000000000..b91a972ac7ef82248c0817307e8063348fb443ea GIT binary patch literal 203204 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�dru%H*ym7H5-jS_0+dEMD9 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

lPye|6{B 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 J;ndIn{0}+SEgk>> literal 0 HcmV?d00001