【8.0.2】更新退出业务

pull/57/MERGE
fengshuonan 2023-11-07 19:33:20 +08:00
parent 97cd9e34c2
commit 78e7844de3
5 changed files with 76 additions and 4 deletions

View File

@ -30,6 +30,7 @@ import cn.stylefeng.roses.kernel.auth.api.pojo.auth.LoginResponse;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
import cn.stylefeng.roses.kernel.auth.api.pojo.payload.DefaultJwtPayload;
import cn.stylefeng.roses.kernel.auth.api.pojo.sso.LoginBySsoTokenRequest;
import cn.stylefeng.roses.kernel.auth.api.pojo.sso.LogoutBySsoTokenRequest;
/**
* 退token
@ -136,4 +137,14 @@ public interface AuthServiceApi {
*/
LoginUser createNewLoginInfo(String token, DefaultJwtPayload defaultJwtPayload);
/**
* CaToken退
* <p>
* 退退
*
* @author fengshuonan
* @since 2023/11/7 15:57
*/
void logoutByCaToken(LogoutBySsoTokenRequest logoutBySsoTokenRequest);
}

View File

@ -0,0 +1,25 @@
package cn.stylefeng.roses.kernel.auth.api.pojo.sso;
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
/**
* token退
*
* @author fengshuonan
* @since 2023/11/7 16:09
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class LogoutBySsoTokenRequest extends BaseRequest {
/**
* token
*/
@NotBlank(message = "CA Token不能为空")
private String caToken;
}

View File

@ -47,6 +47,7 @@ import cn.stylefeng.roses.kernel.auth.api.pojo.payload.DefaultJwtPayload;
import cn.stylefeng.roses.kernel.auth.api.pojo.sso.DecryptCaLoginUser;
import cn.stylefeng.roses.kernel.auth.api.pojo.sso.DecryptCaTokenInfo;
import cn.stylefeng.roses.kernel.auth.api.pojo.sso.LoginBySsoTokenRequest;
import cn.stylefeng.roses.kernel.auth.api.pojo.sso.LogoutBySsoTokenRequest;
import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi;
import cn.stylefeng.roses.kernel.demo.expander.DemoConfigExpander;
import cn.stylefeng.roses.kernel.jwt.api.JwtApi;
@ -121,7 +122,12 @@ public class AuthServiceImpl implements AuthServiceApi {
// aes解密出用户信息
AES aesUtil = SecureUtil.aes(Base64.decode(AuthConfigExpander.getSsoDataDecryptSecret()));
String userInfoJson = aesUtil.decryptStr(encryptUserInfo, CharsetUtil.CHARSET_UTF_8);
String userInfoJson = null;
try {
userInfoJson = aesUtil.decryptStr(encryptUserInfo, CharsetUtil.CHARSET_UTF_8);
} catch (Exception e) {
throw new AuthException(AuthExceptionEnum.SSO_TOKEN_PARSE_ERROR, "sso token无法解析");
}
// 转化为实体类
DecryptCaTokenInfo decryptCaTokenInfo = JSON.parseObject(userInfoJson, DecryptCaTokenInfo.class);
@ -246,4 +252,19 @@ public class AuthServiceImpl implements AuthServiceApi {
return loginUser;
}
@Override
public void logoutByCaToken(LogoutBySsoTokenRequest logoutBySsoTokenRequest) {
// 通过CaToken查询到本地是否有对应的会话
String localGunsToken = caClientTokenCacheApi.get(logoutBySsoTokenRequest.getCaToken());
// 如果缓存不存在则直接返回
if (ObjectUtil.isEmpty(localGunsToken)) {
return;
}
// 如果缓存存在则直接移除token
this.sessionManagerApi.removeSession(localGunsToken);
}
}

View File

@ -44,6 +44,7 @@ public class DefaultStrategyImpl implements ConfigInitStrategyApi {
configInitItems.add(new ConfigInitItem("系统默认密码", "SYS_DEFAULT_PASSWORD", "123456", "用在重置密码的默认密码"));
configInitItems.add(new ConfigInitItem("系统发布版本", "SYS_RELEASE_VERSION", DateUtil.format(new Date(), "yyyyMMdd"), "系统发布的版本号"));
configInitItems.add(new ConfigInitItem("数据库加密AES秘钥", "SYS_ENCRYPT_SECRET_KEY", RandomUtil.randomString(32), "对称加密秘钥,用在数据库数据加密"));
configInitItems.add(new ConfigInitItem("SSO服务端加密Token信息秘钥", "SYS_AUTH_SSO_DECRYPT_DATA_SECRET", RandomUtil.randomString(32), "SSO服务端加密Token信息秘钥用在单点登录认证时候加密生成Token"));
return configInitItems;
}

View File

@ -3,9 +3,11 @@ package cn.stylefeng.roses.kernel.sys.modular.login.controller;
import cn.stylefeng.roses.kernel.auth.api.AuthServiceApi;
import cn.stylefeng.roses.kernel.auth.api.pojo.auth.LoginResponse;
import cn.stylefeng.roses.kernel.auth.api.pojo.sso.LoginBySsoTokenRequest;
import cn.stylefeng.roses.kernel.auth.api.pojo.sso.LogoutBySsoTokenRequest;
import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData;
import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource;
import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource;
import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
@ -29,15 +31,27 @@ public class SsoLoginController {
private AuthServiceApi authServiceApi;
/**
*
* CaToken
*
* @author fengshuonan
* @since 2023/11/7 14:12
*/
@PostResource(name = "系统登录接口", path = "/loginByCaToken", requiredLogin = false)
public ResponseData<LoginResponse> loginApi(@RequestBody @Validated LoginBySsoTokenRequest loginWithTokenRequest) {
@PostResource(name = "通过单点服务的CaToken进行登录", path = "/loginByCaToken", requiredLogin = false)
public ResponseData<LoginResponse> loginByCaToken(@RequestBody @Validated LoginBySsoTokenRequest loginWithTokenRequest) {
LoginResponse loginResponse = authServiceApi.LoginByCaToken(loginWithTokenRequest);
return new SuccessResponseData<>(loginResponse);
}
/**
* CaToken退
*
* @author fengshuonan
* @since 2023/11/7 15:57
*/
@GetResource(name = "通过单点服务的CaToken进行退出本平台的会话", path = "/logoutByCaToken", requiredLogin = false)
public ResponseData<?> logoutByCaToken(@Validated LogoutBySsoTokenRequest logoutBySsoTokenRequest) {
authServiceApi.logoutByCaToken(logoutBySsoTokenRequest);
return new SuccessResponseData<>();
}
}