Merge remote-tracking branch 'origin/master'

master
薛宏祥 12 months ago
commit 03507b8cd4
  1. 182
      src/main/java/org/springblade/core/oauth2/endpoint/OAuth2TokenEndPoint.java
  2. 2
      src/main/java/org/springblade/modules/business/service/impl/WorkOrderServiceImpl.java

@ -0,0 +1,182 @@
package org.springblade.core.oauth2.endpoint;
import com.wf.captcha.SpecCaptcha;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.Generated;
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.jwt.JwtUtil;
import org.springblade.core.jwt.props.JwtProperties;
import org.springblade.core.launch.props.BladeProperties;
import org.springblade.core.log.annotation.ApiLog;
import org.springblade.core.oauth2.exception.OAuth2Exception;
import org.springblade.core.oauth2.granter.TokenGranter;
import org.springblade.core.oauth2.granter.TokenGranterFactory;
import org.springblade.core.oauth2.handler.AuthorizationHandler;
import org.springblade.core.oauth2.handler.TokenHandler;
import org.springblade.core.oauth2.provider.OAuth2Request;
import org.springblade.core.oauth2.provider.OAuth2Response;
import org.springblade.core.oauth2.provider.OAuth2Token;
import org.springblade.core.oauth2.provider.OAuth2Validation;
import org.springblade.core.oauth2.service.OAuth2User;
import org.springblade.core.oauth2.utils.OAuth2ExceptionUtil;
import org.springblade.core.oauth2.utils.OAuth2LogUtil;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.support.Kv;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.Duration;
import java.util.UUID;
@RestController
@Tag(
name = "用户授权认证",
description = "1 - OAuth2授权认证端点"
)
public class OAuth2TokenEndPoint {
private final BladeRedis bladeRedis;
private final JwtProperties jwtProperties;
private final BladeProperties bladeProperties;
private final TokenGranterFactory granterFactory;
private final AuthorizationHandler authorizationHandler;
private final TokenHandler tokenHandler;
@PostMapping({"/oauth/token"})
@Operation(
summary = "获取Token",
description = "OAuth2认证接口",
parameters = {@Parameter(
in = ParameterIn.QUERY,
name = "username",
description = "账号",
schema = @Schema(
type = "string"
)
), @Parameter(
in = ParameterIn.QUERY,
name = "password",
description = "密码",
schema = @Schema(
type = "string"
)
), @Parameter(
in = ParameterIn.QUERY,
name = "grant_type",
description = "授权类型",
schema = @Schema(
type = "string"
)
), @Parameter(
in = ParameterIn.QUERY,
name = "refresh_token",
description = "刷新token",
schema = @Schema(
type = "string"
)
), @Parameter(
in = ParameterIn.QUERY,
name = "scope",
description = "权限范围",
schema = @Schema(
type = "string"
)
)}
)
@ApiLog(value = "登录")
public ResponseEntity<Kv> token() {
OAuth2Request request = OAuth2Request.create().buildArgs();
OAuth2Validation preValidation = this.authorizationHandler.preValidation(request);
if (!preValidation.isSuccess()) {
this.authorizationHandler.preFailure(request, preValidation);
return ResponseEntity.ok(OAuth2Response.create().ofFailure(preValidation.getCode(), preValidation.getMessage()));
} else {
TokenGranter tokenGranter = this.granterFactory.create(request.getGrantType());
OAuth2User user;
try {
user = tokenGranter.user(request);
} catch (OAuth2Exception var8) {
OAuth2LogUtil.logOAuth2Exception(var8, request, this.bladeProperties.isProd());
this.authorizationHandler.preFailure(request, OAuth2Validation.create().setSuccess(false).setCode(var8.getExceptionCode().getCode()).setMessage(var8.getMessage()));
return ResponseEntity.ok(OAuth2Response.create().ofFailure(var8.getExceptionCode().getCode(), var8.getMessage()));
}
OAuth2Validation authValidation = this.authorizationHandler.authValidation(user, request);
if (!authValidation.isSuccess()) {
this.authorizationHandler.authFailure(user, request, authValidation);
OAuth2ExceptionUtil.throwFromCode(authValidation.getCode());
}
OAuth2Token token = tokenGranter.token(user, request);
OAuth2Token enhanceToken = this.tokenHandler.enhance(user, token, request);
this.authorizationHandler.authSuccessful(user, request);
return ResponseEntity.ok(enhanceToken.getArgs());
}
}
@GetMapping({"/oauth/logout"})
@Operation(
summary = "退出登录"
)
public ResponseEntity<Kv> logout() {
BladeUser user = AuthUtil.getUser();
if (user != null && this.jwtProperties.getState()) {
OAuth2Request request = OAuth2Request.create().buildHeaderArgs();
String token = JwtUtil.getToken(request.getToken());
JwtUtil.removeAccessToken(user.getTenantId(), user.getClientId(), String.valueOf(user.getUserId()), token);
JwtUtil.removeRefreshToken(user.getTenantId(), user.getClientId(), String.valueOf(user.getUserId()), token);
}
return ResponseEntity.ok(OAuth2Response.create().ofSuccessful("退出登录成功"));
}
@GetMapping({"/oauth/captcha"})
@Operation(
summary = "获取验证码"
)
public ResponseEntity<Kv> captcha() {
SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5);
String verCode = specCaptcha.text().toLowerCase();
String key = UUID.randomUUID().toString();
this.bladeRedis.setEx("blade:auth::blade:captcha:" + key, verCode, Duration.ofMinutes(30L));
return ResponseEntity.ok(OAuth2Response.create().ofSuccessful("获取验证码成功").set("key", key).set("image", specCaptcha.toBase64()));
}
@GetMapping({"/oauth/clear-cache"})
@Operation(
summary = "清除缓存"
)
public ResponseEntity<Kv> clearCache() {
CacheUtil.clear("blade:biz");
CacheUtil.clear("blade:user");
CacheUtil.clear("blade:dict");
CacheUtil.clear("blade:flow");
CacheUtil.clear("blade:sys");
CacheUtil.clear("blade:param");
CacheUtil.clear("blade:resource");
CacheUtil.clear("blade:menu");
CacheUtil.clear("blade:dict", Boolean.FALSE);
CacheUtil.clear("blade:menu", Boolean.FALSE);
CacheUtil.clear("blade:sys", Boolean.FALSE);
CacheUtil.clear("blade:param", Boolean.FALSE);
return ResponseEntity.ok(OAuth2Response.create().ofSuccessful("清除缓存成功"));
}
@Generated
public OAuth2TokenEndPoint(final BladeRedis bladeRedis, final JwtProperties jwtProperties, final BladeProperties bladeProperties, final TokenGranterFactory granterFactory, final AuthorizationHandler authorizationHandler, final TokenHandler tokenHandler) {
this.bladeRedis = bladeRedis;
this.jwtProperties = jwtProperties;
this.bladeProperties = bladeProperties;
this.granterFactory = granterFactory;
this.authorizationHandler = authorizationHandler;
this.tokenHandler = tokenHandler;
}
}

@ -114,7 +114,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workOrderVO.setApprovePersonName(approvePerson != null ? approvePerson.getRealName() : ""); workOrderVO.setApprovePersonName(approvePerson != null ? approvePerson.getRealName() : "");
//提交用户地址 //提交用户地址
User createUser = UserCache.getUser(detail.getCreateUser()); User createUser = UserCache.getUser(detail.getCreateUser());
workOrderVO.setAddress(createUser != null ? user.getAddress() : ""); workOrderVO.setAddress(createUser != null ? createUser.getAddress() : "");
return workOrderVO; return workOrderVO;
} }

Loading…
Cancel
Save