mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-05-05 05:07:54 +08:00
sso,oauth2插件中调用配置类使用getter方法
This commit is contained in:
parent
88d88198f1
commit
9de31236c6
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user