Browse Source

🎉 单人登录模式新增全平台唯一与单客户端唯一两种选择

pull/1/head
smallchill 1 year ago
parent
commit
5d8e660880
  1. 2
      blade-auth/src/main/java/org/springblade/auth/endpoint/BladeTokenEndPoint.java
  2. 3
      blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
  3. 7
      blade-auth/src/main/java/org/springblade/auth/support/BladeJwtTokenEnhancer.java
  4. 3
      blade-gateway/src/main/java/org/springblade/gateway/filter/AuthFilter.java
  5. 4
      doc/nacos/blade.yaml

2
blade-auth/src/main/java/org/springblade/auth/endpoint/BladeTokenEndPoint.java

@ -119,7 +119,7 @@ public class BladeTokenEndPoint {
String token = JwtUtil.getToken(WebUtil.getRequest().getHeader(TokenConstant.HEADER));
// 清空redis保存的token
if (user != null && jwtProperties.getState()) {
JwtUtil.removeAccessToken(user.getTenantId(), String.valueOf(user.getUserId()), token);
JwtUtil.removeAccessToken(user.getTenantId(), user.getClientId(), String.valueOf(user.getUserId()), token);
}
// 清空资源服务器保存的token
OAuth2AccessToken accessToken = tokenStore.readAccessToken(token);

3
blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java

@ -201,8 +201,9 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
String refreshToken = request.getParameter(TokenUtil.REFRESH_TOKEN_KEY);
Claims claims = JwtUtil.parseJWT(refreshToken);
String tenantId = String.valueOf(claims.get("tenant_id"));
String clientId = String.valueOf(claims.get("client_id"));
String userId = String.valueOf(claims.get("user_id"));
String token = JwtUtil.getRefreshToken(tenantId, userId, refreshToken);
String token = JwtUtil.getRefreshToken(tenantId, clientId, userId, refreshToken);
return StringUtil.equalsIgnoreCase(token, refreshToken);
}
return true;

7
blade-auth/src/main/java/org/springblade/auth/support/BladeJwtTokenEnhancer.java

@ -52,9 +52,10 @@ public class BladeJwtTokenEnhancer implements TokenEnhancer {
BladeUserDetails principal = (BladeUserDetails) authentication.getUserAuthentication().getPrincipal();
String clientId = TokenUtil.getClientIdFromHeader();
//token参数增强
Map<String, Object> info = new HashMap<>(16);
info.put(TokenUtil.CLIENT_ID, TokenUtil.getClientIdFromHeader());
info.put(TokenUtil.CLIENT_ID, clientId);
info.put(TokenUtil.USER_ID, Func.toStr(principal.getUserId()));
info.put(TokenUtil.DEPT_ID, Func.toStr(principal.getDeptId()));
info.put(TokenUtil.POST_ID, Func.toStr(principal.getPostId()));
@ -77,12 +78,12 @@ public class BladeJwtTokenEnhancer implements TokenEnhancer {
String accessTokenValue = oAuth2AccessToken.getValue();
String tenantId = principal.getTenantId();
String userId = Func.toStr(principal.getUserId());
JwtUtil.addAccessToken(tenantId, userId, accessTokenValue, accessToken.getExpiresIn());
JwtUtil.addAccessToken(tenantId, clientId, userId, accessTokenValue, accessToken.getExpiresIn());
if (jwtProperties.getSingle()) {
OAuth2RefreshToken oAuth2RefreshToken = oAuth2AccessToken.getRefreshToken();
String refreshTokenValue = oAuth2RefreshToken.getValue();
JwtUtil.addRefreshToken(tenantId, userId, refreshTokenValue, accessToken.getExpiresIn() * 168);
JwtUtil.addRefreshToken(tenantId, clientId, userId, refreshTokenValue, accessToken.getExpiresIn() * 168);
}
}

3
blade-gateway/src/main/java/org/springblade/gateway/filter/AuthFilter.java

@ -81,8 +81,9 @@ public class AuthFilter implements GlobalFilter, Ordered {
//判断 Token 状态
if (jwtProperties.getState()) {
String tenantId = String.valueOf(claims.get(TokenConstant.TENANT_ID));
String clientId = String.valueOf(claims.get(TokenConstant.CLIENT_ID));
String userId = String.valueOf(claims.get(TokenConstant.USER_ID));
String accessToken = JwtUtil.getAccessToken(tenantId, userId, token);
String accessToken = JwtUtil.getAccessToken(tenantId, clientId, userId, token);
if (!token.equalsIgnoreCase(accessToken)) {
return unAuth(resp, "令牌已失效");
}

4
doc/nacos/blade.yaml

@ -83,6 +83,10 @@ blade:
token:
#是否有状态
state: false
#是否单用户登录
single: false
#单用户登录范围
single-level: all
#token签名
#使用 blade-auth服务 @org.springblade.test.SignKeyGenerator 获取
sign-key: 请配置32位签名

Loading…
Cancel
Save