切换mysql为达梦数据库-代码审查

1.auth-boot模块
This commit is contained in:
2024-09-26 16:00:52 +08:00
parent 014b7c30cb
commit 014ed7fbf7
9 changed files with 26 additions and 31 deletions

View File

@@ -84,7 +84,7 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap
tokenEnhancers.add(jwtAccessTokenConverter()); tokenEnhancers.add(jwtAccessTokenConverter());
tokenEnhancerChain.setTokenEnhancers(tokenEnhancers); tokenEnhancerChain.setTokenEnhancers(tokenEnhancers);
// 获取原有默认授权模式(授权码模式、密码模式、客户端模式、简化模式)的授权者 // 获取原有默认授权模式(授权码模式、密码模式、客户端模式、简化模式)的授权者
List<TokenGranter> granterList = new ArrayList<>(Arrays.asList(endpoints.getTokenGranter())); List<TokenGranter> granterList = new ArrayList<>(Collections.singletonList(endpoints.getTokenGranter()));
// 添加验证码授权模式授权者 // 添加验证码授权模式授权者
granterList.add(new CaptchaTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(), granterList.add(new CaptchaTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(),
@@ -101,7 +101,8 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap
//设置grant_type类型集合 //设置grant_type类型集合
.tokenEnhancer(tokenEnhancerChain) .tokenEnhancer(tokenEnhancerChain)
.tokenGranter(compositeTokenGranter) .tokenGranter(compositeTokenGranter)
/**refresh_token有两种使用方式重复使用(true)、非重复使用(false)默认为true /*
* refresh_token有两种使用方式重复使用(true)、非重复使用(false)默认为true
* 1.重复使用access_token过期刷新时 refresh token过期时间未改变仍以初次生成的时间为准 * 1.重复使用access_token过期刷新时 refresh token过期时间未改变仍以初次生成的时间为准
* 2.非重复使用access_token过期刷新时 refresh_token过期时间延续在refresh_token有效期内刷新而无需失效再次登录 * 2.非重复使用access_token过期刷新时 refresh_token过期时间延续在refresh_token有效期内刷新而无需失效再次登录
*/ */
@@ -125,7 +126,7 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap
tokenServices.setTokenEnhancer(tokenEnhancerChain); tokenServices.setTokenEnhancer(tokenEnhancerChain);
// 多用户体系下刷新token再次认证客户端ID和 UserDetailService 的映射Map // 多用户体系下刷新token再次认证客户端ID和 UserDetailService 的映射Map
Map<String, UserDetailsService> clientUserDetailsServiceMap = new HashMap<>(); Map<String, UserDetailsService> clientUserDetailsServiceMap = new HashMap<>(16);
// 系统管理客户端 // 系统管理客户端
clientUserDetailsServiceMap.put(ClientEnum.WEB_CLIENT.getClientId(), userDetailsService); clientUserDetailsServiceMap.put(ClientEnum.WEB_CLIENT.getClientId(), userDetailsService);

View File

@@ -2,6 +2,7 @@ package com.njcn.auth.controller;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
@@ -21,6 +22,8 @@ import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import java.util.Objects;
/** /**
* @author hongawen * @author hongawen
* @version 1.0.0 * @version 1.0.0
@@ -41,7 +44,7 @@ public class JudgeThirdToken extends BaseController {
@OperateInfo(info = LogEnum.SYSTEM_COMMON) @OperateInfo(info = LogEnum.SYSTEM_COMMON)
@PostMapping("/guangZhou") @PostMapping("/guangZhou")
@ApiOperation("校验广州超高压token有效性") @ApiOperation("校验广州超高压token有效性")
@ApiImplicitParam(name = "token", value = "", required = true) @ApiImplicitParam(name = "token", required = true)
public HttpResult<Object> guangZhou(String token) { public HttpResult<Object> guangZhou(String token) {
RestTemplate restTemplate = new RestTemplate(); RestTemplate restTemplate = new RestTemplate();
String methodDescribe = getMethodDescribe("guangZhou"); String methodDescribe = getMethodDescribe("guangZhou");
@@ -65,8 +68,7 @@ public class JudgeThirdToken extends BaseController {
// 发送post请求并打印结果以String类型接收响应结果JSON字符串 // 发送post请求并打印结果以String类型接收响应结果JSON字符串
String result = restTemplate.postForObject(url, request, String.class); String result = restTemplate.postForObject(url, request, String.class);
JSONObject resultJson = new JSONObject(result); JSONObject resultJson = new JSONObject(result);
System.out.println(result); if (Objects.equals(resultJson.getInt("status"), DataStateEnum.ENABLE.getCode())) {
if (resultJson.getInt("status") == 1) {
//成功 //成功
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
} else { } else {

View File

@@ -20,6 +20,7 @@ import org.springframework.security.oauth2.provider.token.AuthorizationServerTok
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import java.util.Objects;
/** /**
* @author hongawen * @author hongawen
@@ -56,7 +57,7 @@ public class CaptchaTokenGranter extends AbstractTokenGranter {
} }
} }
String password = parameters.get(SecurityConstants.PASSWORD); String password = parameters.get(SecurityConstants.PASSWORD);
String ip = RequestUtil.getRequest().getHeader(SecurityConstants.REQUEST_HEADER_KEY_CLIENT_REAL_IP); String ip = Objects.requireNonNull(RequestUtil.getRequest()).getHeader(SecurityConstants.REQUEST_HEADER_KEY_CLIENT_REAL_IP);
//密码处理 //密码处理
String privateKey = redisUtil.getStringByKey(username + ip); String privateKey = redisUtil.getStringByKey(username + ip);
//秘钥用完即删 //秘钥用完即删

View File

@@ -35,7 +35,7 @@ public class PreAuthenticatedUserDetailsService<T extends Authentication> implem
} }
@Override @Override
public void afterPropertiesSet() throws Exception { public void afterPropertiesSet() {
Assert.notNull(this.userDetailsServiceMap, "UserDetailsService must be set"); Assert.notNull(this.userDetailsServiceMap, "UserDetailsService must be set");
} }

View File

@@ -29,8 +29,6 @@ public abstract class AbstractSmsAuthenticationProvider implements Authenticatio
protected final Log logger = LogFactory.getLog(getClass()); protected final Log logger = LogFactory.getLog(getClass());
protected MessageSourceAccessor messages = SpringSecurityMessageSource.getAccessor(); protected MessageSourceAccessor messages = SpringSecurityMessageSource.getAccessor();
private UserCache userCache = new NullUserCache(); private UserCache userCache = new NullUserCache();
private boolean forcePrincipalAsString = false; private boolean forcePrincipalAsString = false;
@@ -64,12 +62,14 @@ public abstract class AbstractSmsAuthenticationProvider implements Authenticatio
SmsCodeAuthenticationToken authentication) SmsCodeAuthenticationToken authentication)
throws AuthenticationException; throws AuthenticationException;
@Override
public final void afterPropertiesSet() throws Exception { public final void afterPropertiesSet() throws Exception {
Assert.notNull(this.userCache, "A user cache must be set"); Assert.notNull(this.userCache, "A user cache must be set");
Assert.notNull(this.messages, "A message source must be set"); Assert.notNull(this.messages, "A message source must be set");
doAfterPropertiesSet(); doAfterPropertiesSet();
} }
@Override
public Authentication authenticate(Authentication authentication) public Authentication authenticate(Authentication authentication)
throws AuthenticationException { throws AuthenticationException {
Assert.isInstanceOf(SmsCodeAuthenticationToken.class, authentication, Assert.isInstanceOf(SmsCodeAuthenticationToken.class, authentication,
@@ -175,7 +175,7 @@ public abstract class AbstractSmsAuthenticationProvider implements Authenticatio
return result; return result;
} }
protected void doAfterPropertiesSet() throws Exception { protected void doAfterPropertiesSet() {
} }
public UserCache getUserCache() { public UserCache getUserCache() {
@@ -255,6 +255,7 @@ public abstract class AbstractSmsAuthenticationProvider implements Authenticatio
this.hideUserNotFoundExceptions = hideUserNotFoundExceptions; this.hideUserNotFoundExceptions = hideUserNotFoundExceptions;
} }
@Override
public void setMessageSource(MessageSource messageSource) { public void setMessageSource(MessageSource messageSource) {
this.messages = new MessageSourceAccessor(messageSource); this.messages = new MessageSourceAccessor(messageSource);
} }
@@ -263,6 +264,7 @@ public abstract class AbstractSmsAuthenticationProvider implements Authenticatio
this.userCache = userCache; this.userCache = userCache;
} }
@Override
public boolean supports(Class<?> authentication) { public boolean supports(Class<?> authentication) {
return (SmsCodeAuthenticationToken.class return (SmsCodeAuthenticationToken.class
.isAssignableFrom(authentication)); .isAssignableFrom(authentication));
@@ -295,6 +297,7 @@ public abstract class AbstractSmsAuthenticationProvider implements Authenticatio
} }
private class DefaultPreAuthenticationChecks implements UserDetailsChecker { private class DefaultPreAuthenticationChecks implements UserDetailsChecker {
@Override
public void check(UserDetails user) { public void check(UserDetails user) {
if (!user.isAccountNonLocked()) { if (!user.isAccountNonLocked()) {
logger.debug("User account is locked"); logger.debug("User account is locked");
@@ -323,6 +326,7 @@ public abstract class AbstractSmsAuthenticationProvider implements Authenticatio
} }
private class DefaultPostAuthenticationChecks implements UserDetailsChecker { private class DefaultPostAuthenticationChecks implements UserDetailsChecker {
@Override
public void check(UserDetails user) { public void check(UserDetails user) {
if (!user.isCredentialsNonExpired()) { if (!user.isCredentialsNonExpired()) {
logger.debug("User account credentials have expired"); logger.debug("User account credentials have expired");

View File

@@ -14,14 +14,13 @@ public interface CustomUserDetailsService extends UserDetailsService {
/** /**
* @param username 用户名 * @param username 用户名
* @return 用户信息 * @return 用户信息
* @throws UsernameNotFoundException
*/ */
@Override
UserDetails loadUserByUsername(String username) throws UsernameNotFoundException; UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
/** /**
* @param phone 手机号 * @param phone 手机号
* @return 用户信息 * @return 用户信息
* @throws UsernameNotFoundException
*/ */
UserDetails loadUserByPhone(String phone) throws UsernameNotFoundException; UserDetails loadUserByPhone(String phone) throws UsernameNotFoundException;

View File

@@ -14,7 +14,6 @@ import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.UserDetails; 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.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@@ -2,16 +2,11 @@ package com.njcn.auth.service;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.github.tocrhz.mqtt.publisher.MqttPublisher;
import com.nimbusds.jose.JWSObject; import com.nimbusds.jose.JWSObject;
import com.njcn.common.config.GeneralInfo;
import com.njcn.common.pojo.constant.OperateType;
import com.njcn.common.pojo.constant.SecurityConstants; import com.njcn.common.pojo.constant.SecurityConstants;
import com.njcn.common.pojo.dto.LogInfoDTO;
import com.njcn.common.pojo.dto.UserTokenInfo; import com.njcn.common.pojo.dto.UserTokenInfo;
import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.utils.PubUtils;
import com.njcn.redis.utils.RedisUtil; import com.njcn.redis.utils.RedisUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -38,11 +33,6 @@ public class UserTokenService {
private final RedisUtil redisUtil; private final RedisUtil redisUtil;
private final MqttPublisher publisher;
private final GeneralInfo generalInfo;
/** /**
* 记录用户token信息并经过处理后达到最新登录的使用者将之前的token信息置为黑名单过期状态 * 记录用户token信息并经过处理后达到最新登录的使用者将之前的token信息置为黑名单过期状态
* 1、从在线名单中获取该用户的token信息key为:TOKEN_ONLINE_PREFIX+useridvalue为userTokenInfo的json对象 * 1、从在线名单中获取该用户的token信息key为:TOKEN_ONLINE_PREFIX+useridvalue为userTokenInfo的json对象
@@ -65,8 +55,8 @@ public class UserTokenService {
} }
JSONObject accessJson = JSONUtil.parseObj(accessJwsObject.getPayload().toString()); JSONObject accessJson = JSONUtil.parseObj(accessJwsObject.getPayload().toString());
String userIndex = accessJson.getStr(SecurityConstants.USER_INDEX_KEY); String userIndex = accessJson.getStr(SecurityConstants.USER_INDEX_KEY);
String nickName = accessJson.getStr(SecurityConstants.USER_NICKNAME_KEY); // String nickName = accessJson.getStr(SecurityConstants.USER_NICKNAME_KEY);
String loginName = accessJson.getStr(SecurityConstants.USER_NAME_KEY); // String loginName = accessJson.getStr(SecurityConstants.USER_NAME_KEY);
//查询是否有在线的当前用户 //查询是否有在线的当前用户
String onlineUserKey = SecurityConstants.TOKEN_ONLINE_PREFIX + userIndex; String onlineUserKey = SecurityConstants.TOKEN_ONLINE_PREFIX + userIndex;
Object onlineTokenInfoOld = redisUtil.getObjectByKey(onlineUserKey); Object onlineTokenInfoOld = redisUtil.getObjectByKey(onlineUserKey);
@@ -94,7 +84,7 @@ public class UserTokenService {
throw new BusinessException(CommonResponseEnum.PARSE_TOKEN_ERROR); throw new BusinessException(CommonResponseEnum.PARSE_TOKEN_ERROR);
} }
JSONObject refreshJson = JSONUtil.parseObj(refreshJwsObject.getPayload().toString()); JSONObject refreshJson = JSONUtil.parseObj(refreshJwsObject.getPayload().toString());
String refreshJti = refreshJson.getStr(SecurityConstants.JWT_JTI); // String refreshJti = refreshJson.getStr(SecurityConstants.JWT_JTI);
Long refreshExpireTime = refreshJson.getLong(SecurityConstants.JWT_EXP); Long refreshExpireTime = refreshJson.getLong(SecurityConstants.JWT_EXP);
userTokenInfo.setAccessTokenJti(accessJti); userTokenInfo.setAccessTokenJti(accessJti);
userTokenInfo.setRefreshToken(refreshToken.getValue()); userTokenInfo.setRefreshToken(refreshToken.getValue());

View File

@@ -36,8 +36,7 @@ public class AuthPubUtil {
public static JSONObject getLoginByToken(String token){ public static JSONObject getLoginByToken(String token){
JWSObject jwsObject = JWSObject.parse(token); JWSObject jwsObject = JWSObject.parse(token);
String payload = jwsObject.getPayload().toString(); String payload = jwsObject.getPayload().toString();
JSONObject jsonObject = JSONUtil.parseObj(payload); return JSONUtil.parseObj(payload);
return jsonObject;
} }
} }