From f6ac9a62a8b23a95d69087b06f55f5f000c1a15f Mon Sep 17 00:00:00 2001
From: zhangmeng <1334717033@qq.com>
Date: Thu, 4 Nov 2021 12:10:12 +0800
Subject: [PATCH] =?UTF-8?q?update=202021=E5=B9=B411=E6=9C=884=E6=97=A512:0?=
=?UTF-8?q?9:56?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
mystyle-cloud-admin-manager/pom.xml | 17 +++
.../config/security/ResourceServerConfig.java | 101 ++++++++++++++++++
.../config/security/SecurityProperty.java | 42 ++++++++
.../src/main/resources/application.yml | 19 +++-
.../src/main/resources/public.key | 1 +
.../file/config/ResourceServerConfig.java | 100 +++++++++++++++++
.../file/config/SecurityProperty.java | 42 ++++++++
.../file/controller/UploadController.java | 1 +
.../file/feign/UserFeignService.java | 15 ++-
.../src/main/resources/application.yml | 15 ++-
.../src/main/resources/public.key | 1 +
mystyle-cloud-model/pom.xml | 6 ++
.../model/bean/GlobalExceptionHandler.java | 74 +++++++++++++
.../com/zhangmeng/model/dto/SysConstant.java | 12 +++
.../dto/exception/CustomizeException.java | 65 +++++++++++
.../java/com/zhangmeng/model/vo/Result.java | 4 +
mystyle-cloud-oauth/pom.xml | 12 +++
.../com/zhangmeng/oauth/OauthApplication.java | 4 +
.../CustomUserAuthenticationConverter.java | 2 +-
.../config/FeignOauth2RequestInterceptor.java | 2 +-
.../oauth/config/UserDetailsServiceImpl.java | 10 +-
.../oauth/controller/AuthController.java | 8 --
.../com/zhangmeng/oauth/feign/AdminFeign.java | 15 ++-
.../oauth/service/impl/AuthServiceImpl.java | 7 +-
.../src/main/resources/application.yml | 18 +++-
.../java/com/zhangmeng/oauth/BcryptTest.java | 13 +++
mystyle-cloud-user/pom.xml | 43 --------
.../com/zhangmeng/user/UserApplication.java | 19 ----
.../user/controller/UserController.java | 21 ----
.../src/main/resources/application.yml | 26 -----
pom.xml | 1 -
31 files changed, 576 insertions(+), 140 deletions(-)
create mode 100644 mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/config/security/ResourceServerConfig.java
create mode 100644 mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/config/security/SecurityProperty.java
create mode 100644 mystyle-cloud-admin-manager/src/main/resources/public.key
create mode 100644 mystyle-cloud-file/src/main/java/com/zhangmeng/file/config/ResourceServerConfig.java
create mode 100644 mystyle-cloud-file/src/main/java/com/zhangmeng/file/config/SecurityProperty.java
create mode 100644 mystyle-cloud-file/src/main/resources/public.key
create mode 100644 mystyle-cloud-model/src/main/java/com/zhangmeng/model/bean/GlobalExceptionHandler.java
create mode 100644 mystyle-cloud-model/src/main/java/com/zhangmeng/model/dto/SysConstant.java
create mode 100644 mystyle-cloud-model/src/main/java/com/zhangmeng/model/dto/exception/CustomizeException.java
create mode 100644 mystyle-cloud-oauth/src/test/java/com/zhangmeng/oauth/BcryptTest.java
delete mode 100644 mystyle-cloud-user/pom.xml
delete mode 100644 mystyle-cloud-user/src/main/java/com/zhangmeng/user/UserApplication.java
delete mode 100644 mystyle-cloud-user/src/main/java/com/zhangmeng/user/controller/UserController.java
delete mode 100644 mystyle-cloud-user/src/main/resources/application.yml
diff --git a/mystyle-cloud-admin-manager/pom.xml b/mystyle-cloud-admin-manager/pom.xml
index 92a11eb..24b42f5 100644
--- a/mystyle-cloud-admin-manager/pom.xml
+++ b/mystyle-cloud-admin-manager/pom.xml
@@ -10,6 +10,18 @@
4.0.0
mystyle-cloud-admin-manager
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 8
+ 8
+
+
+
+
@@ -45,6 +57,11 @@
spring-cloud-starter-loadbalancer
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
org.springframework.cloud
spring-cloud-starter-sleuth
diff --git a/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/config/security/ResourceServerConfig.java b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/config/security/ResourceServerConfig.java
new file mode 100644
index 0000000..e0751aa
--- /dev/null
+++ b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/config/security/ResourceServerConfig.java
@@ -0,0 +1,101 @@
+package com.zhangmeng.admin.manager.config.security;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.http.HttpMethod;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
+import org.springframework.security.oauth2.provider.token.TokenStore;
+import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
+import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
+
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.stream.Collectors;
+
+/**
+ * @author 转身的背影在心底里沉沦
+ * @date 2021年9月14日16:45:29
+ * @version 1.0
+ */
+@Configuration
+@EnableResourceServer
+@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)// 激活方法上的PreAuthorize注解
+public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
+
+ // 公钥
+ private static final String PUBLIC_KEY = "public.key";
+
+ @Autowired
+ private SecurityProperty securityProperty;
+
+ /***
+ * 定义JwtTokenStore
+ * @param jwtAccessTokenConverter
+ * @return
+ */
+ @Bean
+ public TokenStore tokenStore(JwtAccessTokenConverter jwtAccessTokenConverter) {
+ return new JwtTokenStore(jwtAccessTokenConverter);
+ }
+
+ /***
+ * 定义JJwtAccessTokenConverter
+ * @return
+ */
+ @Bean
+ public JwtAccessTokenConverter jwtAccessTokenConverter() {
+ JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
+ converter.setVerifierKey(getPubKey()); //秘钥的一部分
+ return converter;
+ }
+ /**
+ * 获取非对称加密公钥 Key
+ * @return 公钥 Key
+ */
+ private String getPubKey() {
+ Resource resource = new ClassPathResource(PUBLIC_KEY);
+ try {
+ InputStreamReader inputStreamReader = new InputStreamReader(resource.getInputStream());
+ BufferedReader br = new BufferedReader(inputStreamReader);
+ return br.lines().collect(Collectors.joining("\n"));
+ } catch (IOException ioe) {
+ return null;
+ }
+ }
+
+ /***
+ * SpringSecurity
+ * Http安全配置,对每个到达系统的http请求链接进行校验
+ * @param http
+ * @throws Exception
+ */
+ @Override
+ public void configure(HttpSecurity http) throws Exception {
+
+ /**
+ * - /swagger-ui.html
+ * - /swagger-ui/**
+ * - /swagger-resources/**
+ * - /v2/api-docs
+ * - /v3/api-docs
+ * - /doc.html
+ * - /webjars/springfox-swagger-ui/**
+ */
+
+ // 所有请求必须认证通过
+ http.authorizeRequests()
+ // 跨域预检请求
+ .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
+ .antMatchers(securityProperty.getOpenApi()).permitAll()
+ .anyRequest().
+ authenticated(); // 其他地址需要认证授权
+ }
+}
diff --git a/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/config/security/SecurityProperty.java b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/config/security/SecurityProperty.java
new file mode 100644
index 0000000..1536244
--- /dev/null
+++ b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/config/security/SecurityProperty.java
@@ -0,0 +1,42 @@
+package com.zhangmeng.admin.manager.config.security;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author 转身的背影在心底里沉沦
+ * @date 2021年9月14日16:50:47
+ * @version 1.0
+ * */
+@Data
+@Configuration
+@ConfigurationProperties("mystyle.security")
+public class SecurityProperty {
+
+ /**
+ * 超级管理员不认证
+ * */
+ private boolean superAuthOpen;
+
+ /**
+ * 不验证权限用户名
+ * */
+ private String superAdmin;
+
+ /**
+ * 记住密码标识
+ * */
+ private String rememberKey;
+
+ /**
+ * 开放接口列表
+ * */
+ private String[] openApi;
+
+ /**
+ * 是否允许多账号在线
+ * */
+ private Integer maximum = 1;
+
+}
diff --git a/mystyle-cloud-admin-manager/src/main/resources/application.yml b/mystyle-cloud-admin-manager/src/main/resources/application.yml
index b988c0f..dd8c7cb 100644
--- a/mystyle-cloud-admin-manager/src/main/resources/application.yml
+++ b/mystyle-cloud-admin-manager/src/main/resources/application.yml
@@ -23,7 +23,7 @@ spring:
type: web
base-url: http://localhost:9411/
service:
- name: mystyle-cloud-file
+ name: mystyle-cloud-admin-manager
sleuth:
sampler:
probability: 1
@@ -31,6 +31,9 @@ spring:
nacos:
discovery:
server-addr: 127.0.0.1:8848
+feign:
+ sentinel:
+ enabled: true
mybatis:
type-aliases-package: com.zhangmeng.model.entity
configuration:
@@ -40,4 +43,16 @@ mapper:
style: normal
enum-as-simple-type: true
identity: MYSQL
- check-example-entity-class: true
\ No newline at end of file
+ check-example-entity-class: true
+
+mystyle:
+ security:
+ open-api:
+ #swagger-ui.html
+ - /swagger-ui.html
+ - /swagger-ui/**
+ - /swagger-resources/**
+ - /v2/api-docs
+ - /v3/api-docs
+ - /doc.html
+ - /webjars/**
\ No newline at end of file
diff --git a/mystyle-cloud-admin-manager/src/main/resources/public.key b/mystyle-cloud-admin-manager/src/main/resources/public.key
new file mode 100644
index 0000000..cfceccb
--- /dev/null
+++ b/mystyle-cloud-admin-manager/src/main/resources/public.key
@@ -0,0 +1 @@
+-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAizuj0fBV2+dj4lM3G6efKYvC2czd07BqmzV++E2yBguVks3XWvsW8qlzmG+t1XBCnRFDI/t1Ddc/Jsnlfy4YzRN8otb/Xn6Yz9ACFvZIPGx/q0cqcrgVaR9rSQiSzsGTgUGHNJk8r3A4w9PSSB552Z9s6p5TsWK5ezlfgg+2ANKn1eJ6R/hzajS/B1bTAqYcl9ddo7prneoeAN5LjlMhc2e0cSVgQt8ALP+4x/bTMnDkMjG6R8lnDAxE27B2ZPaLOIOjkUMK+9mZa4RNBoCDG6J/fwPD1NUoVRCbyr/TVaS4EzyhfNK1QW3BlZ0NLSI/SFD3eryKaFQdacJHS31neQIDAQAB-----END PUBLIC KEY-----
\ No newline at end of file
diff --git a/mystyle-cloud-file/src/main/java/com/zhangmeng/file/config/ResourceServerConfig.java b/mystyle-cloud-file/src/main/java/com/zhangmeng/file/config/ResourceServerConfig.java
new file mode 100644
index 0000000..e6f29b8
--- /dev/null
+++ b/mystyle-cloud-file/src/main/java/com/zhangmeng/file/config/ResourceServerConfig.java
@@ -0,0 +1,100 @@
+package com.zhangmeng.file.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.http.HttpMethod;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
+import org.springframework.security.oauth2.provider.token.TokenStore;
+import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
+import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.stream.Collectors;
+
+/**
+ * @author 转身的背影在心底里沉沦
+ * @date 2021年9月14日16:45:29
+ * @version 1.0
+ */
+@Configuration
+@EnableResourceServer
+@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)// 激活方法上的PreAuthorize注解
+public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
+
+ // 公钥
+ private static final String PUBLIC_KEY = "public.key";
+
+ @Autowired
+ private SecurityProperty securityProperty;
+
+ /***
+ * 定义JwtTokenStore
+ * @param jwtAccessTokenConverter
+ * @return
+ */
+ @Bean
+ public TokenStore tokenStore(JwtAccessTokenConverter jwtAccessTokenConverter) {
+ return new JwtTokenStore(jwtAccessTokenConverter);
+ }
+
+ /***
+ * 定义JJwtAccessTokenConverter
+ * @return
+ */
+ @Bean
+ public JwtAccessTokenConverter jwtAccessTokenConverter() {
+ JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
+ converter.setVerifierKey(getPubKey()); //秘钥的一部分
+ return converter;
+ }
+ /**
+ * 获取非对称加密公钥 Key
+ * @return 公钥 Key
+ */
+ private String getPubKey() {
+ Resource resource = new ClassPathResource(PUBLIC_KEY);
+ try {
+ InputStreamReader inputStreamReader = new InputStreamReader(resource.getInputStream());
+ BufferedReader br = new BufferedReader(inputStreamReader);
+ return br.lines().collect(Collectors.joining("\n"));
+ } catch (IOException ioe) {
+ return null;
+ }
+ }
+
+ /***
+ * SpringSecurity
+ * Http安全配置,对每个到达系统的http请求链接进行校验
+ * @param http
+ * @throws Exception
+ */
+ @Override
+ public void configure(HttpSecurity http) throws Exception {
+
+ /**
+ * - /swagger-ui.html
+ * - /swagger-ui/**
+ * - /swagger-resources/**
+ * - /v2/api-docs
+ * - /v3/api-docs
+ * - /doc.html
+ * - /webjars/springfox-swagger-ui/**
+ */
+
+ // 所有请求必须认证通过
+ http.authorizeRequests()
+ // 跨域预检请求
+ .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
+ .antMatchers(securityProperty.getOpenApi()).permitAll()
+ .anyRequest().
+ authenticated(); // 其他地址需要认证授权
+ }
+}
diff --git a/mystyle-cloud-file/src/main/java/com/zhangmeng/file/config/SecurityProperty.java b/mystyle-cloud-file/src/main/java/com/zhangmeng/file/config/SecurityProperty.java
new file mode 100644
index 0000000..bdbf94d
--- /dev/null
+++ b/mystyle-cloud-file/src/main/java/com/zhangmeng/file/config/SecurityProperty.java
@@ -0,0 +1,42 @@
+package com.zhangmeng.file.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author 转身的背影在心底里沉沦
+ * @date 2021年9月14日16:50:47
+ * @version 1.0
+ * */
+@Data
+@Configuration
+@ConfigurationProperties("mystyle.security")
+public class SecurityProperty {
+
+ /**
+ * 超级管理员不认证
+ * */
+ private boolean superAuthOpen;
+
+ /**
+ * 不验证权限用户名
+ * */
+ private String superAdmin;
+
+ /**
+ * 记住密码标识
+ * */
+ private String rememberKey;
+
+ /**
+ * 开放接口列表
+ * */
+ private String[] openApi;
+
+ /**
+ * 是否允许多账号在线
+ * */
+ private Integer maximum = 1;
+
+}
diff --git a/mystyle-cloud-file/src/main/java/com/zhangmeng/file/controller/UploadController.java b/mystyle-cloud-file/src/main/java/com/zhangmeng/file/controller/UploadController.java
index 5b8ac7a..7b8cdf3 100644
--- a/mystyle-cloud-file/src/main/java/com/zhangmeng/file/controller/UploadController.java
+++ b/mystyle-cloud-file/src/main/java/com/zhangmeng/file/controller/UploadController.java
@@ -3,6 +3,7 @@ package com.zhangmeng.file.controller;
import com.zhangmeng.api.service.file.UploadControllerApi;
import com.zhangmeng.file.config.FileConfig;
+import com.zhangmeng.file.feign.UserFeignService;
import com.zhangmeng.file.service.FileInfoService;
import com.zhangmeng.file.service.UploadService;
import com.zhangmeng.file.utils.Base64DecodeMultipartFile;
diff --git a/mystyle-cloud-file/src/main/java/com/zhangmeng/file/feign/UserFeignService.java b/mystyle-cloud-file/src/main/java/com/zhangmeng/file/feign/UserFeignService.java
index d4a96d2..093467f 100644
--- a/mystyle-cloud-file/src/main/java/com/zhangmeng/file/feign/UserFeignService.java
+++ b/mystyle-cloud-file/src/main/java/com/zhangmeng/file/feign/UserFeignService.java
@@ -1,14 +1,21 @@
package com.zhangmeng.file.feign;
+import com.zhangmeng.model.dto.SysConstant;
+import com.zhangmeng.model.entity.Permission;
+import com.zhangmeng.model.entity.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
-@FeignClient(value = "mystyle-cloud-user")
-@RequestMapping("/user")
+import java.util.List;
+
+@FeignClient(SysConstant.mystyle_cloud_admin_manager)
public interface UserFeignService {
- @GetMapping("/username")
- public String hi(@RequestParam(value = "name", defaultValue = "forezp",required = false) String name);
+ @RequestMapping("/user/findByUserName")
+ public User findByUserName(@RequestParam(value = "username", defaultValue = "forezp",required = false) String username);
+
+ @RequestMapping("/permission/findByUserId")
+ List findByUserId(@RequestParam(value = "id", defaultValue = "forezp",required = false)Long id);
}
diff --git a/mystyle-cloud-file/src/main/resources/application.yml b/mystyle-cloud-file/src/main/resources/application.yml
index c5a9dd9..a2febdc 100644
--- a/mystyle-cloud-file/src/main/resources/application.yml
+++ b/mystyle-cloud-file/src/main/resources/application.yml
@@ -49,4 +49,17 @@ file:
url:
aliyun: http://47.104.229.92
localhost: localhost:8083
- vmware: http://192.168.52.165
\ No newline at end of file
+ vmware: http://192.168.52.165
+mystyle:
+ security:
+ open-api:
+ #swagger-ui.html
+ - /swagger-ui.html
+ - /swagger-ui/**
+ - /swagger-resources/**
+ - /v2/api-docs
+ - /v3/api-docs
+ - /doc.html
+ - /webjars/**
+ #
+ - /upload/findByUserName
\ No newline at end of file
diff --git a/mystyle-cloud-file/src/main/resources/public.key b/mystyle-cloud-file/src/main/resources/public.key
new file mode 100644
index 0000000..cfceccb
--- /dev/null
+++ b/mystyle-cloud-file/src/main/resources/public.key
@@ -0,0 +1 @@
+-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAizuj0fBV2+dj4lM3G6efKYvC2czd07BqmzV++E2yBguVks3XWvsW8qlzmG+t1XBCnRFDI/t1Ddc/Jsnlfy4YzRN8otb/Xn6Yz9ACFvZIPGx/q0cqcrgVaR9rSQiSzsGTgUGHNJk8r3A4w9PSSB552Z9s6p5TsWK5ezlfgg+2ANKn1eJ6R/hzajS/B1bTAqYcl9ddo7prneoeAN5LjlMhc2e0cSVgQt8ALP+4x/bTMnDkMjG6R8lnDAxE27B2ZPaLOIOjkUMK+9mZa4RNBoCDG6J/fwPD1NUoVRCbyr/TVaS4EzyhfNK1QW3BlZ0NLSI/SFD3eryKaFQdacJHS31neQIDAQAB-----END PUBLIC KEY-----
\ No newline at end of file
diff --git a/mystyle-cloud-model/pom.xml b/mystyle-cloud-model/pom.xml
index ac1b1f8..aaac2e8 100644
--- a/mystyle-cloud-model/pom.xml
+++ b/mystyle-cloud-model/pom.xml
@@ -99,5 +99,11 @@
org.springframework.boot
spring-boot-starter-security
+
+
+ org.springframework.cloud
+ spring-cloud-starter-oauth2
+ 2.2.4.RELEASE
+
\ No newline at end of file
diff --git a/mystyle-cloud-model/src/main/java/com/zhangmeng/model/bean/GlobalExceptionHandler.java b/mystyle-cloud-model/src/main/java/com/zhangmeng/model/bean/GlobalExceptionHandler.java
new file mode 100644
index 0000000..19ef42b
--- /dev/null
+++ b/mystyle-cloud-model/src/main/java/com/zhangmeng/model/bean/GlobalExceptionHandler.java
@@ -0,0 +1,74 @@
+package com.zhangmeng.model.bean;
+
+import com.zhangmeng.model.dto.exception.CustomizeException;
+import com.zhangmeng.model.vo.Result;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.security.authentication.DisabledException;
+import org.springframework.security.authentication.LockedException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 全局异常处理
+ *
+ * @author zhangmeng
+ * @version 1.0
+ * @date 2021年4月25日10:47:56
+ */
+@RestControllerAdvice
+public class GlobalExceptionHandler {
+
+ private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
+
+ /**
+ * 处理自定义的业务异常
+ * @param request
+ * @param e
+ * @return
+ */
+ @ExceptionHandler(value = CustomizeException.class)
+ public Result bizExceptionHandler(HttpServletRequest request, CustomizeException e){
+ logger.error("发生业务异常!原因是:{}",e.getErrorMsg());
+ return Result.error(e.getErrorCode(),e.getErrorMsg());
+ }
+
+
+ /**
+ * 处理登录业务异常
+ * @param request
+ * @param e
+ * @return
+ */
+ @ExceptionHandler(value = DisabledException.class)
+ public Result bizExceptionHandler(HttpServletRequest request, DisabledException e){
+ logger.error("发生业务异常!原因是:{}",e.getMessage());
+ return Result.error(e.getMessage());
+ }
+
+ /**
+ * 处理登录业务异常
+ * @param request
+ * @param e
+ * @return
+ */
+ @ExceptionHandler(value = LockedException.class)
+ public Result bizExceptionHandler(HttpServletRequest request, LockedException e){
+ logger.error("发生业务异常!原因是:{}",e.getMessage());
+ return Result.error(e.getMessage());
+ }
+
+ /**
+ * 处理空指针的异常
+ * @param request
+ * @param e
+ * @return
+ */
+ @ExceptionHandler(value =NullPointerException.class)
+ public Result exceptionHandler(HttpServletRequest request, NullPointerException e){
+ logger.error("发生空指针异常!原因是:",e);
+ return Result.error(e.getMessage());
+ }
+}
diff --git a/mystyle-cloud-model/src/main/java/com/zhangmeng/model/dto/SysConstant.java b/mystyle-cloud-model/src/main/java/com/zhangmeng/model/dto/SysConstant.java
new file mode 100644
index 0000000..8796586
--- /dev/null
+++ b/mystyle-cloud-model/src/main/java/com/zhangmeng/model/dto/SysConstant.java
@@ -0,0 +1,12 @@
+package com.zhangmeng.model.dto;
+
+/**
+ * 系统常量
+ */
+public class SysConstant {
+
+ public static final String mystyle_cloud_admin_manager = "mystyle-cloud-admin-manager";
+
+ public static final String mystyle_cloud_oauth = "mystyle-cloud-oauth";
+
+}
diff --git a/mystyle-cloud-model/src/main/java/com/zhangmeng/model/dto/exception/CustomizeException.java b/mystyle-cloud-model/src/main/java/com/zhangmeng/model/dto/exception/CustomizeException.java
new file mode 100644
index 0000000..9858338
--- /dev/null
+++ b/mystyle-cloud-model/src/main/java/com/zhangmeng/model/dto/exception/CustomizeException.java
@@ -0,0 +1,65 @@
+package com.zhangmeng.model.dto.exception;
+
+/**
+ * @author zhangmeng
+ * @version 1.0
+ * @date 2021年1月22日 11:36:35
+ * 自定义异常
+ */
+public class CustomizeException extends RuntimeException {
+
+ private static final long serialVersionUID = -4345234005653168721L;
+
+ /**
+ * 错误码
+ */
+ private Integer errorCode;
+ /**
+ * 错误信息
+ */
+ private String errorMsg;
+
+ public CustomizeException() {
+ super();
+ }
+
+ //提供有参构造方法
+ public CustomizeException(String errorMsg) {
+ super(errorMsg);
+ this.errorMsg = errorMsg;
+ }
+
+ public CustomizeException(Integer errorCode, String errorMsg) {
+ super(errorMsg);
+ this.errorCode = errorCode;
+ this.errorMsg = errorMsg;
+ }
+
+ public CustomizeException(Integer errorCode, String errorMsg, Throwable cause) {
+ super(errorMsg, cause);
+ this.errorCode = errorCode;
+ this.errorMsg = errorMsg;
+ }
+
+
+ public Integer getErrorCode() {
+ return errorCode;
+ }
+
+ public void setErrorCode(Integer errorCode) {
+ this.errorCode = errorCode;
+ }
+
+ public String getErrorMsg() {
+ return errorMsg;
+ }
+
+ public void setErrorMsg(String errorMsg) {
+ this.errorMsg = errorMsg;
+ }
+
+ @Override
+ public Throwable fillInStackTrace() {
+ return this;
+ }
+}
diff --git a/mystyle-cloud-model/src/main/java/com/zhangmeng/model/vo/Result.java b/mystyle-cloud-model/src/main/java/com/zhangmeng/model/vo/Result.java
index 7182092..65ec322 100644
--- a/mystyle-cloud-model/src/main/java/com/zhangmeng/model/vo/Result.java
+++ b/mystyle-cloud-model/src/main/java/com/zhangmeng/model/vo/Result.java
@@ -38,6 +38,10 @@ public class Result implements Serializable {
return new Result(false,StatusCode.ERROR,message);
}
+ public static Result error(Integer code,String message) {
+ return new Result(false,code,message);
+ }
+
public long getCount() {
return count;
}
diff --git a/mystyle-cloud-oauth/pom.xml b/mystyle-cloud-oauth/pom.xml
index 1f2075f..bca9599 100644
--- a/mystyle-cloud-oauth/pom.xml
+++ b/mystyle-cloud-oauth/pom.xml
@@ -10,6 +10,18 @@
4.0.0
mystyle-cloud-oauth
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 8
+ 8
+
+
+
+
diff --git a/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/OauthApplication.java b/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/OauthApplication.java
index e7c3554..f91d742 100644
--- a/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/OauthApplication.java
+++ b/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/OauthApplication.java
@@ -2,8 +2,10 @@ package com.zhangmeng.oauth;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.ComponentScan;
/**
* @author zhangmeng
@@ -13,6 +15,8 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
+@EntityScan("com.zhangmeng.model.entity")
+@ComponentScan(basePackages = {"com.zhangmeng.oauth","com.zhangmeng.model.bean"})
public class OauthApplication {
public static void main(String[] args) {
SpringApplication.run(OauthApplication.class,args);
diff --git a/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/config/CustomUserAuthenticationConverter.java b/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/config/CustomUserAuthenticationConverter.java
index 626fa77..91371c4 100644
--- a/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/config/CustomUserAuthenticationConverter.java
+++ b/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/config/CustomUserAuthenticationConverter.java
@@ -1,6 +1,6 @@
package com.zhangmeng.oauth.config;
-import com.zhangmeng.oauth.utils.UserJwt;
+import com.zhangmeng.oauth.dto.UserJwt;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.security.core.Authentication;
diff --git a/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/config/FeignOauth2RequestInterceptor.java b/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/config/FeignOauth2RequestInterceptor.java
index df63033..d7c3663 100644
--- a/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/config/FeignOauth2RequestInterceptor.java
+++ b/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/config/FeignOauth2RequestInterceptor.java
@@ -1,6 +1,6 @@
package com.zhangmeng.oauth.config;
-import com.zhangmeng.oauth.utils.JwtToken;
+import com.zhangmeng.oauth.dto.JwtToken;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.context.annotation.Configuration;
diff --git a/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/config/UserDetailsServiceImpl.java b/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/config/UserDetailsServiceImpl.java
index 16116e8..d4e4655 100644
--- a/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/config/UserDetailsServiceImpl.java
+++ b/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/config/UserDetailsServiceImpl.java
@@ -1,9 +1,9 @@
package com.zhangmeng.oauth.config;
-import com.zhangmeng.domain.admin.Permission;
-import com.zhangmeng.feign.admin.AdminFeign;
-import com.zhangmeng.oauth.utils.UserJwt;
-import org.apache.commons.lang3.StringUtils;
+import com.alibaba.cloud.commons.lang.StringUtils;
+import com.zhangmeng.model.entity.Permission;
+import com.zhangmeng.oauth.dto.UserJwt;
+import com.zhangmeng.oauth.feign.AdminFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.authority.AuthorityUtils;
@@ -69,7 +69,7 @@ public class UserDetailsServiceImpl implements UserDetailsService {
}
// 通过数据库去查询用户通过密码授权
- com.zhangmeng.domain.admin.User user = this.adminFeign.findByUserName(username);
+ com.zhangmeng.model.entity.User user = this.adminFeign.findByUserName(username);
//根据用户查询权限列表
List permissions = this.adminFeign.findByUserId(user.getId());
diff --git a/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/controller/AuthController.java b/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/controller/AuthController.java
index b03c97e..d0d2086 100644
--- a/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/controller/AuthController.java
+++ b/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/controller/AuthController.java
@@ -62,14 +62,6 @@ public class AuthController extends BaseController implements AuthControllerApi
if (StringUtils.isEmpty(password)) {
throw new RuntimeException("密码不允许为空");
}
- User user = this.adminFeign.findByUserName(username);
- if (user == null){
- throw new UsernameNotFoundException("用户名错误");
- }
- //校验密码是否正确,如果正确则申请令牌
- if (!this.passwordEncoder.matches(password,user.getPassword())) {
- throw new RuntimeException("密码错误");
- }
OauthConfig oauthConfig = this.oauthConfig();
AuthToken authToken = auth_login(username, password,oauthConfig);
//用户身份令牌
diff --git a/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/feign/AdminFeign.java b/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/feign/AdminFeign.java
index 1db15ea..c5f41cc 100644
--- a/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/feign/AdminFeign.java
+++ b/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/feign/AdminFeign.java
@@ -1,12 +1,21 @@
package com.zhangmeng.oauth.feign;
+import com.zhangmeng.model.dto.SysConstant;
+import com.zhangmeng.model.entity.Permission;
import com.zhangmeng.model.entity.User;
import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
-@FeignClient("")
+import java.util.List;
+
+@FeignClient(SysConstant.mystyle_cloud_admin_manager)
public interface AdminFeign {
- @RequestMapping("")
- User findByUserName(String username);
+ @RequestMapping("/user/findByUserName")
+ public User findByUserName(@RequestParam(value = "username", defaultValue = "forezp",required = false) String username);
+
+ @RequestMapping("/permission/findByUserId")
+ List findByUserId(@RequestParam(value = "id", defaultValue = "forezp",required = false)Long id);
}
diff --git a/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/service/impl/AuthServiceImpl.java b/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/service/impl/AuthServiceImpl.java
index e0bf0b5..07483bb 100644
--- a/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/service/impl/AuthServiceImpl.java
+++ b/mystyle-cloud-oauth/src/main/java/com/zhangmeng/oauth/service/impl/AuthServiceImpl.java
@@ -1,5 +1,7 @@
package com.zhangmeng.oauth.service.impl;
+import com.zhangmeng.model.dto.SysConstant;
+import com.zhangmeng.model.dto.exception.CustomizeException;
import com.zhangmeng.oauth.dto.AuthToken;
import com.zhangmeng.oauth.service.AuthService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -20,6 +22,7 @@ import org.springframework.web.client.RestTemplate;
import java.io.IOException;
import java.util.Map;
+
@Service
public class AuthServiceImpl implements AuthService {
@@ -58,7 +61,7 @@ public class AuthServiceImpl implements AuthService {
*/
private AuthToken applyToken(String username, String password, String clientId, String clientSecret) {
//选中认证服务的地址
- ServiceInstance serviceInstance = loadBalancerClient.choose("mystyle-user-oauth");
+ ServiceInstance serviceInstance = loadBalancerClient.choose(SysConstant.mystyle_cloud_oauth);
if (serviceInstance == null) {
throw new RuntimeException("找不到对应的服务");
}
@@ -96,7 +99,7 @@ public class AuthServiceImpl implements AuthService {
}
if(map == null || map.get("access_token") == null || map.get("refresh_token") == null || map.get("jti") == null) {
//jti是jwt令牌的唯一标识作为用户身份令牌
- throw new RuntimeException("创建令牌失败!");
+ throw new CustomizeException("创建令牌失败!");
}
//将响应数据封装成AuthToken对象
diff --git a/mystyle-cloud-oauth/src/main/resources/application.yml b/mystyle-cloud-oauth/src/main/resources/application.yml
index 2a80f3a..53d5329 100644
--- a/mystyle-cloud-oauth/src/main/resources/application.yml
+++ b/mystyle-cloud-oauth/src/main/resources/application.yml
@@ -2,7 +2,7 @@ server:
port: 31006
spring:
application:
- name: mystyle-cloud-file
+ name: mystyle-cloud-oauth
datasource:
username: root
password: root
@@ -23,7 +23,7 @@ spring:
type: web
base-url: http://localhost:9411/
service:
- name: mystyle-cloud-file
+ name: mystyle-cloud-oauth
sleuth:
sampler:
probability: 1
@@ -40,4 +40,16 @@ mapper:
style: normal
enum-as-simple-type: true
identity: MYSQL
- check-example-entity-class: true
\ No newline at end of file
+ check-example-entity-class: true
+encrypt:
+ key-store:
+ location: classpath:/mystyle-cloud.jks
+ secret: mystyle-cloud
+ alias: mystyle-cloud
+ password: mystyle-cloud
+feign:
+ client:
+ config:
+ default:
+ connect-timeout: 20000
+ read-timeout: 20000
\ No newline at end of file
diff --git a/mystyle-cloud-oauth/src/test/java/com/zhangmeng/oauth/BcryptTest.java b/mystyle-cloud-oauth/src/test/java/com/zhangmeng/oauth/BcryptTest.java
new file mode 100644
index 0000000..8368309
--- /dev/null
+++ b/mystyle-cloud-oauth/src/test/java/com/zhangmeng/oauth/BcryptTest.java
@@ -0,0 +1,13 @@
+package com.zhangmeng.oauth;
+
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+
+public class BcryptTest {
+
+ public static void main(String[] args) {
+
+ BCryptPasswordEncoder cryptPasswordEncoder = new BCryptPasswordEncoder();
+ String encode = cryptPasswordEncoder.encode("mystyle-cloud");
+ System.out.println(encode);
+ }
+}
diff --git a/mystyle-cloud-user/pom.xml b/mystyle-cloud-user/pom.xml
deleted file mode 100644
index fd62cc6..0000000
--- a/mystyle-cloud-user/pom.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
- mystyle-cloud-parent
- com.zhangmeng
- 1.0-SNAPSHOT
-
- 4.0.0
-
- mystyle-cloud-user
-
-
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
-
- com.alibaba.cloud
- spring-cloud-starter-alibaba-nacos-discovery
-
-
-
- com.alibaba.cloud
- spring-cloud-starter-alibaba-sentinel
-
-
-
-
- org.springframework.cloud
- spring-cloud-starter-sleuth
-
-
-
- org.springframework.cloud
- spring-cloud-sleuth-zipkin
-
-
-
-
\ No newline at end of file
diff --git a/mystyle-cloud-user/src/main/java/com/zhangmeng/user/UserApplication.java b/mystyle-cloud-user/src/main/java/com/zhangmeng/user/UserApplication.java
deleted file mode 100644
index ae1faa0..0000000
--- a/mystyle-cloud-user/src/main/java/com/zhangmeng/user/UserApplication.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.zhangmeng.user;
-
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
-
-/**
- * @author zhangmeng
- * @date 2021年10月30日14:55:11
- * @version 1.0
- */
-@SpringBootApplication
-@EnableDiscoveryClient
-public class UserApplication {
- public static void main(String[] args) {
- SpringApplication.run(UserApplication.class,args);
- }
-}
diff --git a/mystyle-cloud-user/src/main/java/com/zhangmeng/user/controller/UserController.java b/mystyle-cloud-user/src/main/java/com/zhangmeng/user/controller/UserController.java
deleted file mode 100644
index 53d46b6..0000000
--- a/mystyle-cloud-user/src/main/java/com/zhangmeng/user/controller/UserController.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.zhangmeng.user.controller;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("/user")
-public class UserController {
-
- @Value("${server.port}")
- String port;
-
- @GetMapping("/username")
- public String hi(@RequestParam(value = "name", defaultValue = "forezp",required = false) String name) {
- return "hello " + name + ", i'm provider ,my port:" + port;
-
- }
-}
diff --git a/mystyle-cloud-user/src/main/resources/application.yml b/mystyle-cloud-user/src/main/resources/application.yml
deleted file mode 100644
index 7636d6a..0000000
--- a/mystyle-cloud-user/src/main/resources/application.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-server:
- port: 31001
-spring:
- application:
- name: mystyle-cloud-user
- cloud:
- nacos:
- discovery:
- server-addr: 127.0.0.1:8848
- sentinel:
- transport:
- port: 18763
- dashboard: localhost:8748
- zipkin:
- sender:
- type: web
- base-url: http://localhost:9411/
- service:
- name: mystyle-cloud-user
- sleuth:
- sampler:
- probability: 1
-
-feign:
- sentinel:
- enabled: true
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 9eb3331..cadec9a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,7 +21,6 @@
- mystyle-cloud-user
mystyle-cloud-file
mystyle-cloud-gateway
mystyle-cloud-model