sso,oauth2插件中调用配置类使用getter方法

This commit is contained in:
naah69 2022-04-14 11:24:03 +08:00
parent 88d88198f1
commit 9de31236c6
6 changed files with 79 additions and 33 deletions

View File

@ -304,7 +304,14 @@ public class SaSsoConfig implements Serializable {
this.notLoginView = notLoginView;
return this;
}
/**
* @return 函数 SSO-Server端未登录时返回的View
*/
public Supplier<Object> getNotLoginView() {
return notLoginView;
}
/**
* @param doLoginHandle SSO-Server端登录函数
* @return 对象自身
@ -314,6 +321,13 @@ public class SaSsoConfig implements Serializable {
return this;
}
/**
* @return 函数 SSO-Server端登录函数
*/
public BiFunction<String, String, Object> getDoLoginHandle() {
return doLoginHandle;
}
/**
* @param ticketResultHandle SSO-Client端自定义校验Ticket返回值的处理逻辑 每次从认证中心获取校验Ticket的结果后调用
* @return 对象自身
@ -322,7 +336,14 @@ public class SaSsoConfig implements Serializable {
this.ticketResultHandle = ticketResultHandle;
return this;
}
/**
* @return 函数 SSO-Client端自定义校验Ticket返回值的处理逻辑 每次从认证中心获取校验Ticket的结果后调用
*/
public BiFunction<Object, String, Object> getTicketResultHandle() {
return ticketResultHandle;
}
/**
* @param sendHttp SSO-Client端发送Http请求的处理函数
* @return 对象自身
@ -332,7 +353,12 @@ public class SaSsoConfig implements Serializable {
return this;
}
/**
* @return 函数 SSO-Client端发送Http请求的处理函数
*/
public Function<String, Object> getSendHttp() {
return sendHttp;
}
}

View File

@ -42,17 +42,17 @@ public class SaSsoHandle {
}
// SSO-Server端校验ticket 获取账号id
if(req.isPath(Api.ssoCheckTicket) && cfg.isHttp) {
if(req.isPath(Api.ssoCheckTicket) && cfg.getIsHttp()) {
return ssoCheckTicket();
}
// SSO-Server端单点注销 [模式一] (不带loginId参数)
if(req.isPath(Api.ssoLogout) && cfg.isSlo && req.hasParam(ParamName.loginId) == false) {
if(req.isPath(Api.ssoLogout) && cfg.getIsSlo() && req.hasParam(ParamName.loginId) == false) {
return ssoServerLogoutType1();
}
// SSO-Server端单点注销 [模式三] (带loginId参数)
if(req.isPath(Api.ssoLogout) && cfg.isHttp && cfg.isSlo && req.hasParam(ParamName.loginId)) {
if(req.isPath(Api.ssoLogout) && cfg.getIsHttp() && cfg.getIsSlo() && req.hasParam(ParamName.loginId)) {
return ssoServerLogout();
}
@ -74,7 +74,7 @@ public class SaSsoHandle {
// ---------- 此处有两种情况分开处理
// ---- 情况1在SSO认证中心尚未登录需要先去登录
if(stpLogic.isLogin() == false) {
return cfg.notLoginView.get();
return cfg.getNotLoginView().get();
}
// ---- 情况2在SSO认证中心已经登录需要重定向回 Client 而这又分为两种方式
String mode = req.getParam(ParamName.mode, "");
@ -101,7 +101,7 @@ public class SaSsoHandle {
SaSsoConfig cfg = SaManager.getConfig().getSso();
// 处理
return cfg.doLoginHandle.apply(req.getParam(ParamName.name), req.getParam(ParamName.pwd));
return cfg.getDoLoginHandle().apply(req.getParam(ParamName.name), req.getParam(ParamName.pwd));
}
/**
@ -162,7 +162,7 @@ public class SaSsoHandle {
SaSsoUtil.checkSecretkey(secretkey);
// step.2 遍历通知Client端注销会话
SaSsoUtil.forEachSloUrl(loginId, url -> cfg.sendHttp.apply(url));
SaSsoUtil.forEachSloUrl(loginId, url -> cfg.getSendHttp().apply(url));
// step.3 Server端注销
stpLogic.logout(loginId);
@ -190,17 +190,17 @@ public class SaSsoHandle {
}
// ---------- SSO-Client端单点注销 [模式二]
if(req.isPath(Api.ssoLogout) && cfg.isSlo && cfg.isHttp == false) {
if(req.isPath(Api.ssoLogout) && cfg.getIsSlo() && cfg.getIsHttp() == false) {
return ssoLogoutType2();
}
// ---------- SSO-Client端单点注销 [模式三]
if(req.isPath(Api.ssoLogout) && cfg.isSlo && cfg.isHttp) {
if(req.isPath(Api.ssoLogout) && cfg.getIsSlo() && cfg.getIsHttp()) {
return ssoLogoutType3();
}
// ---------- SSO-Client端单点注销的回调 [模式三]
if(req.isPath(Api.ssoLogoutCall) && cfg.isSlo && cfg.isHttp) {
if(req.isPath(Api.ssoLogoutCall) && cfg.getIsSlo() && cfg.getIsHttp()) {
return ssoLogoutCall();
}
@ -240,8 +240,8 @@ public class SaSsoHandle {
Object loginId = checkTicket(ticket, Api.ssoLogin);
// Be: 如果开发者自定义了处理逻辑
if(cfg.ticketResultHandle != null) {
return cfg.ticketResultHandle.apply(loginId, back);
if(cfg.getTicketResultHandle() != null) {
return cfg.getTicketResultHandle().apply(loginId, back);
}
// ------- 2如果loginId有值说明ticket有效进行登录并重定向至back地址
if(loginId != null ) {
@ -289,7 +289,7 @@ public class SaSsoHandle {
// 调用SSO-Server认证中心API进行注销
String url = SaSsoUtil.buildSloUrl(stpLogic.getLoginId());
String body = String.valueOf(cfg.sendHttp.apply(url));
String body = String.valueOf(cfg.getSendHttp().apply(url));
if(SaSsoConsts.OK.equals(body) == false) {
return SaResult.error("单点注销失败");
}
@ -349,14 +349,14 @@ public class SaSsoHandle {
public static Object checkTicket(String ticket, String currUri) {
SaSsoConfig cfg = SaManager.getConfig().getSso();
// --------- 两种模式
if(cfg.isHttp) {
if(cfg.getIsHttp()) {
// 模式三使用http请求校验ticket
String ssoLogoutCall = null;
if(cfg.isSlo) {
if(cfg.getIsSlo()) {
ssoLogoutCall = SaHolder.getRequest().getUrl().replace(currUri, Api.ssoLogoutCall);
}
String checkUrl = SaSsoUtil.buildCheckTicketUrl(ticket, ssoLogoutCall);
Object body = cfg.sendHttp.apply(checkUrl);
Object body = cfg.getSendHttp().apply(checkUrl);
return (SaFoxUtil.isEmpty(body) ? null : body);
} else {
// 模式二直连Redis校验ticket

View File

@ -382,7 +382,7 @@ public class SaSsoTemplate {
*/
public Object getUserinfo(Object loginId) {
String url = buildUserinfoUrl(loginId);
return SaManager.getConfig().getSso().sendHttp.apply(url);
return SaManager.getConfig().getSso().getSendHttp().apply(url);
}

View File

@ -16,11 +16,11 @@ spring:
# redis配置
redis:
# Redis数据库索引默认为0
database: 1
database: 15
# Redis服务器地址
host: 127.0.0.1
host: 192.168.101.202
# Redis服务器连接端口
port: 6379
port: 30068
# Redis服务器连接密码默认为空
# password:
# 连接超时时间(毫秒)
@ -35,7 +35,7 @@ spring:
max-idle: 10
# 连接池中的最小空闲连接
min-idle: 0
password: 123456

View File

@ -223,6 +223,13 @@ public class SaOAuth2Config implements Serializable {
return this;
}
/**
* @return 函数 OAuth-Server端未登录时返回的View
*/
public Supplier<Object> getNotLoginView() {
return notLoginView;
}
/**
* @param confirmView OAuth-Server端确认授权时返回的View
* @return 对象自身
@ -231,7 +238,14 @@ public class SaOAuth2Config implements Serializable {
this.confirmView = confirmView;
return this;
}
/**
* @return 函数 OAuth-Server端确认授权时返回的View
*/
public BiFunction<String, String, Object> getConfirmView() {
return confirmView;
}
/**
* @param doLoginHandle OAuth-Server端登录函数
* @return 对象自身
@ -241,7 +255,13 @@ public class SaOAuth2Config implements Serializable {
return this;
}
/**
* @return 函数 OAuth-Server端登录函数
*/
public BiFunction<String, String, Object> getDoLoginHandle() {
return doLoginHandle;
}
@Override
public String toString() {
return "SaOAuth2Config [isCode=" + isCode + ", isImplicit=" + isImplicit + ", isPassword=" + isPassword

View File

@ -41,7 +41,7 @@ public class SaOAuth2Handle {
// 模式一Code授权码
if(req.isPath(Api.authorize) && req.isParam(Param.response_type, ResponseType.code)) {
SaClientModel cm = currClientModel();
if(cfg.isCode && (cm.isCode || cm.isAutoMode)) {
if(cfg.getIsCode() && (cm.isCode || cm.isAutoMode)) {
return authorize(req, res, cfg);
}
throw new SaOAuth2Exception("暂未开放的授权模式");
@ -75,7 +75,7 @@ public class SaOAuth2Handle {
// 模式二隐藏式
if(req.isPath(Api.authorize) && req.isParam(Param.response_type, ResponseType.token)) {
SaClientModel cm = currClientModel();
if(cfg.isImplicit && (cm.isImplicit || cm.isAutoMode)) {
if(cfg.getIsImplicit() && (cm.isImplicit || cm.isAutoMode)) {
return authorize(req, res, cfg);
}
throw new SaOAuth2Exception("暂未开放的授权模式");
@ -84,7 +84,7 @@ public class SaOAuth2Handle {
// 模式三密码式
if(req.isPath(Api.token) && req.isParam(Param.grant_type, GrantType.password)) {
SaClientModel cm = currClientModel();
if(cfg.isPassword && (cm.isPassword || cm.isAutoMode)) {
if(cfg.getIsPassword() && (cm.isPassword || cm.isAutoMode)) {
return password(req, res, cfg);
}
throw new SaOAuth2Exception("暂未开放的授权模式");
@ -93,7 +93,7 @@ public class SaOAuth2Handle {
// 模式四凭证式
if(req.isPath(Api.client_token) && req.isParam(Param.grant_type, GrantType.client_credentials)) {
SaClientModel cm = currClientModel();
if(cfg.isClient && (cm.isClient || cm.isAutoMode)) {
if(cfg.getIsClient() && (cm.isClient || cm.isAutoMode)) {
return clientToken(req, res, cfg);
}
throw new SaOAuth2Exception("暂未开放的授权模式");
@ -114,7 +114,7 @@ public class SaOAuth2Handle {
// 1如果尚未登录, 则先去登录
if(StpUtil.isLogin() == false) {
return cfg.notLoginView.get();
return cfg.getNotLoginView().get();
}
// 2构建请求Model
@ -129,7 +129,7 @@ public class SaOAuth2Handle {
// 5判断如果此次申请的Scope该用户尚未授权则转到授权页面
boolean isGrant = SaOAuth2Util.isGrant(ra.loginId, ra.clientId, ra.scope);
if(isGrant == false) {
return cfg.confirmView.apply(ra.clientId, ra.scope);
return cfg.getConfirmView().apply(ra.clientId, ra.scope);
}
// 6判断授权类型
@ -226,7 +226,7 @@ public class SaOAuth2Handle {
* @return 处理结果
*/
public static Object doLogin(SaRequest req, SaResponse res, SaOAuth2Config cfg) {
return cfg.doLoginHandle.apply(req.getParamNotNull(Param.name), req.getParamNotNull("pwd"));
return cfg.getDoLoginHandle().apply(req.getParamNotNull(Param.name), req.getParamNotNull("pwd"));
}
/**
@ -264,7 +264,7 @@ public class SaOAuth2Handle {
SaHolder.getStorage().set(StpUtil.stpLogic.splicingKeyJustCreatedSave(), "no-token");
// 4调用API 开始登录如果没能成功登录则直接退出
Object retObj = cfg.doLoginHandle.apply(username, password);
Object retObj = cfg.getDoLoginHandle().apply(username, password);
if(StpUtil.isLogin() == false) {
return retObj;
}