Browse Source

👣 重构底层多租户

master
wangxiang 3 years ago
parent
commit
f0090f31fd
  1. 50
      kicc-common/kicc-common-feign/src/main/java/com/cloud/kicc/common/feign/config/FeignErrorDecoder.java
  2. 13
      kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/grant/provider/KiccDaoAuthenticationProvider.java
  3. 6
      kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/service/KiccUserDetailsService.java
  4. 3
      kicc-platform/kicc-platform-api/kicc-monitor-api/src/main/java/com/cloud/kicc/monitor/api/feign/RemoteLogService.java
  5. 3
      kicc-platform/kicc-platform-api/kicc-monitor-api/src/main/java/com/cloud/kicc/monitor/api/feign/RemoteTokenService.java
  6. 5
      kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/feign/RemoteDictService.java
  7. 3
      kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/feign/RemoteUserService.java
  8. 2
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/AppController.java
  9. 2
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java

50
kicc-common/kicc-common-feign/src/main/java/com/cloud/kicc/common/feign/config/FeignErrorDecoder.java

@ -0,0 +1,50 @@ @@ -0,0 +1,50 @@
package com.cloud.kicc.common.feign.config;
import com.alibaba.fastjson.JSON;
import com.cloud.kicc.common.core.api.R;
import feign.FeignException;
import feign.Response;
import feign.RetryableException;
import feign.codec.ErrorDecoder;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
/**
*<p>
* 自定义feign错误响应数据
*</p>
*
* @Author: entfrm开发团队-王翔
* @Date: 2022/5/16
*/
@Slf4j
@Configuration
public class FeignErrorDecoder extends ErrorDecoder.Default {
@Override
@SneakyThrows
public Exception decode(String methodKey, Response response) {
Exception exception = super.decode(methodKey, response);
// 如果是RetryableException,则返回继续重试
if (exception instanceof RetryableException) {
return exception;
}
try {
// 如果是FeignException,则对其进行处理,并抛出Exception
if (exception instanceof FeignException && ((FeignException) exception).responseBody().isPresent()) {
ByteBuffer responseBody = ((FeignException) exception).responseBody().get();
String bodyText = StandardCharsets.UTF_8.newDecoder().decode(responseBody.asReadOnlyBuffer()).toString();
R result = JSON.parseObject(bodyText, R.class);
return new Exception(result.getMsg());
}
} catch (Exception ex) {
log.error(ex.getMessage(), ex);
}
return exception;
}
}

13
kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/grant/provider/KiccDaoAuthenticationProvider.java

@ -2,6 +2,7 @@ package com.cloud.kicc.common.security.grant.provider; @@ -2,6 +2,7 @@ package com.cloud.kicc.common.security.grant.provider;
import cn.hutool.extra.spring.SpringUtil;
import com.cloud.kicc.common.core.util.WebUtil;
import com.cloud.kicc.common.security.exception.ServerErrorException;
import com.cloud.kicc.common.security.service.KiccUserDetailsService;
import org.springframework.core.Ordered;
import org.springframework.security.authentication.BadCredentialsException;
@ -17,6 +18,7 @@ import org.springframework.security.core.userdetails.UserDetailsService; @@ -17,6 +18,7 @@ import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.oauth2.common.exceptions.OAuth2Exception;
import org.springframework.util.Assert;
import java.util.Comparator;
@ -107,16 +109,13 @@ public class KiccDaoAuthenticationProvider extends AbstractUserDetailsAuthentica @@ -107,16 +109,13 @@ public class KiccDaoAuthenticationProvider extends AbstractUserDetailsAuthentica
"UserDetailsService returned null, which is an interface contract violation");
}
return loadedUser;
}
catch (UsernameNotFoundException ex) {
} catch (UsernameNotFoundException ex) {
mitigateAgainstTimingAttack(authentication);
throw ex;
}
catch (InternalAuthenticationServiceException ex) {
} catch (InternalAuthenticationServiceException ex) {
throw ex;
}
catch (Exception ex) {
throw new InternalAuthenticationServiceException(ex.getMessage(), ex);
} catch (Exception ex) {
throw new ServerErrorException(ex.getMessage(), ex);
}
}

6
kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/service/KiccUserDetailsService.java

@ -2,17 +2,17 @@ package com.cloud.kicc.common.security.service; @@ -2,17 +2,17 @@ package com.cloud.kicc.common.security.service;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import com.cloud.kicc.system.api.entity.User;
import com.cloud.kicc.common.core.api.R;
import com.cloud.kicc.common.core.constant.CommonConstants;
import com.cloud.kicc.common.core.constant.SecurityConstants;
import com.cloud.kicc.common.data.entity.KiccUser;
import com.cloud.kicc.system.api.entity.User;
import org.springframework.core.Ordered;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.oauth2.common.exceptions.OAuth2Exception;
import java.util.Arrays;
import java.util.Collection;
@ -54,7 +54,7 @@ public interface KiccUserDetailsService extends UserDetailsService, Ordered { @@ -54,7 +54,7 @@ public interface KiccUserDetailsService extends UserDetailsService, Ordered {
*/
default UserDetails getUserDetails(R<User> result) {
if (result == null || result.getData() == null) {
throw new UsernameNotFoundException("用户不存在");
throw new OAuth2Exception(result.getMsg());
}
User user = result.getData();

3
kicc-platform/kicc-platform-api/kicc-monitor-api/src/main/java/com/cloud/kicc/monitor/api/feign/RemoteLogService.java

@ -4,6 +4,7 @@ import com.cloud.kicc.common.core.api.R; @@ -4,6 +4,7 @@ import com.cloud.kicc.common.core.api.R;
import com.cloud.kicc.common.core.constant.AppConstants;
import com.cloud.kicc.common.core.constant.SecurityConstants;
import com.cloud.kicc.common.core.constant.ServiceNameConstants;
import com.cloud.kicc.common.feign.config.FeignErrorDecoder;
import com.cloud.kicc.monitor.api.entity.OperLog;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
@ -18,7 +19,7 @@ import org.springframework.web.bind.annotation.RequestHeader; @@ -18,7 +19,7 @@ import org.springframework.web.bind.annotation.RequestHeader;
* @Author: entfrm开发团队-王翔
* @Date: 2022/2/17
*/
@FeignClient(contextId = "remoteLogService", value = ServiceNameConstants.MONITOR_SERVICE)
@FeignClient(contextId = "remoteLogService", value = ServiceNameConstants.MONITOR_SERVICE, configuration = {FeignErrorDecoder.class})
public interface RemoteLogService {
/**

3
kicc-platform/kicc-platform-api/kicc-monitor-api/src/main/java/com/cloud/kicc/monitor/api/feign/RemoteTokenService.java

@ -3,6 +3,7 @@ package com.cloud.kicc.monitor.api.feign; @@ -3,6 +3,7 @@ package com.cloud.kicc.monitor.api.feign;
import com.cloud.kicc.common.core.api.R;
import com.cloud.kicc.common.core.constant.SecurityConstants;
import com.cloud.kicc.common.core.constant.ServiceNameConstants;
import com.cloud.kicc.common.feign.config.FeignErrorDecoder;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
@ -16,7 +17,7 @@ import java.util.Map; @@ -16,7 +17,7 @@ import java.util.Map;
* @Author: entfrm开发团队-王翔
* @Date: 2022/2/17
*/
@FeignClient(contextId = "remoteTokenService", value = ServiceNameConstants.AUTH_SERVICE)
@FeignClient(contextId = "remoteTokenService", value = ServiceNameConstants.AUTH_SERVICE, configuration = {FeignErrorDecoder.class})
public interface RemoteTokenService {
/**

5
kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/feign/RemoteDictService.java

@ -1,10 +1,11 @@ @@ -1,10 +1,11 @@
package com.cloud.kicc.system.api.feign;
import com.cloud.kicc.system.api.entity.DictData;
import com.cloud.kicc.common.core.api.R;
import com.cloud.kicc.common.core.constant.AppConstants;
import com.cloud.kicc.common.core.constant.SecurityConstants;
import com.cloud.kicc.common.core.constant.ServiceNameConstants;
import com.cloud.kicc.common.feign.config.FeignErrorDecoder;
import com.cloud.kicc.system.api.entity.DictData;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@ -20,7 +21,7 @@ import java.util.List; @@ -20,7 +21,7 @@ import java.util.List;
* @Author: entfrm开发团队-王翔
* @Date: 2022/2/17
*/
@FeignClient(contextId = "remoteDictService", value = ServiceNameConstants.SYSTEM_SERVICE)
@FeignClient(contextId = "remoteDictService", value = ServiceNameConstants.SYSTEM_SERVICE, configuration = {FeignErrorDecoder.class})
public interface RemoteDictService {
/**

3
kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/feign/RemoteUserService.java

@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
package com.cloud.kicc.system.api.feign;
import com.cloud.kicc.common.feign.config.FeignErrorDecoder;
import com.cloud.kicc.system.api.entity.User;
import com.cloud.kicc.common.core.api.R;
import com.cloud.kicc.common.core.constant.AppConstants;
@ -18,7 +19,7 @@ import org.springframework.web.bind.annotation.RequestHeader; @@ -18,7 +19,7 @@ import org.springframework.web.bind.annotation.RequestHeader;
* @Author: entfrm开发团队-王翔
* @Date: 2022/2/17
*/
@FeignClient(contextId = "remoteUserService", value = ServiceNameConstants.SYSTEM_SERVICE)
@FeignClient(contextId = "remoteUserService", value = ServiceNameConstants.SYSTEM_SERVICE, configuration = {FeignErrorDecoder.class})
public interface RemoteUserService {
/**

2
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/AppController.java

@ -48,7 +48,7 @@ public class AppController { @@ -48,7 +48,7 @@ public class AppController {
public R<User> selectByPhone(@PathVariable String phone) {
User user = userService.getOne(Wrappers.<User>query().lambda().eq(User::getPhone, phone));
if (user == null) {
return R.error(String.format("用户信息为空 %s", phone));
return R.error(String.format("找不到手机号:%s,请检查是否用户或者密码不正确!", phone));
}
return R.ok(userService.getUserAuthority(user));
}

2
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java

@ -105,7 +105,7 @@ public class UserController { @@ -105,7 +105,7 @@ public class UserController {
public R selectByUserName(@PathVariable String userName) {
User user = userService.getOne(Wrappers.<User>query().lambda().eq(User::getUserName, userName));
if (user == null) {
return R.error(String.format("用户信息为空 %s", userName));
return R.error(String.format("找不到用户:%s,请检查是否用户或者密码不正确!", userName));
}
return R.ok(userService.getUserAuthority(user));
}

Loading…
Cancel
Save