mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-09-19 18:22:15 +08:00
sso,oauth2插件中调用配置类使用getter方法
This commit is contained in:
@@ -305,6 +305,13 @@ public class SaSsoConfig implements Serializable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return 函数 SSO-Server端:未登录时返回的View
|
||||||
|
*/
|
||||||
|
public Supplier<Object> getNotLoginView() {
|
||||||
|
return notLoginView;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param doLoginHandle SSO-Server端:登录函数
|
* @param doLoginHandle SSO-Server端:登录函数
|
||||||
* @return 对象自身
|
* @return 对象自身
|
||||||
@@ -314,6 +321,13 @@ public class SaSsoConfig implements Serializable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return 函数 SSO-Server端:登录函数
|
||||||
|
*/
|
||||||
|
public BiFunction<String, String, Object> getDoLoginHandle() {
|
||||||
|
return doLoginHandle;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param ticketResultHandle SSO-Client端:自定义校验Ticket返回值的处理逻辑 (每次从认证中心获取校验Ticket的结果后调用)
|
* @param ticketResultHandle SSO-Client端:自定义校验Ticket返回值的处理逻辑 (每次从认证中心获取校验Ticket的结果后调用)
|
||||||
* @return 对象自身
|
* @return 对象自身
|
||||||
@@ -323,6 +337,13 @@ public class SaSsoConfig implements Serializable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return 函数 SSO-Client端:自定义校验Ticket返回值的处理逻辑 (每次从认证中心获取校验Ticket的结果后调用)
|
||||||
|
*/
|
||||||
|
public BiFunction<Object, String, Object> getTicketResultHandle() {
|
||||||
|
return ticketResultHandle;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param sendHttp SSO-Client端:发送Http请求的处理函数
|
* @param sendHttp SSO-Client端:发送Http请求的处理函数
|
||||||
* @return 对象自身
|
* @return 对象自身
|
||||||
@@ -332,7 +353,12 @@ public class SaSsoConfig implements Serializable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return 函数 SSO-Client端:发送Http请求的处理函数
|
||||||
|
*/
|
||||||
|
public Function<String, Object> getSendHttp() {
|
||||||
|
return sendHttp;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -42,17 +42,17 @@ public class SaSsoHandle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SSO-Server端:校验ticket 获取账号id
|
// SSO-Server端:校验ticket 获取账号id
|
||||||
if(req.isPath(Api.ssoCheckTicket) && cfg.isHttp) {
|
if(req.isPath(Api.ssoCheckTicket) && cfg.getIsHttp()) {
|
||||||
return ssoCheckTicket();
|
return ssoCheckTicket();
|
||||||
}
|
}
|
||||||
|
|
||||||
// SSO-Server端:单点注销 [模式一] (不带loginId参数)
|
// 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();
|
return ssoServerLogoutType1();
|
||||||
}
|
}
|
||||||
|
|
||||||
// SSO-Server端:单点注销 [模式三] (带loginId参数)
|
// 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();
|
return ssoServerLogout();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,7 +74,7 @@ public class SaSsoHandle {
|
|||||||
// ---------- 此处有两种情况分开处理:
|
// ---------- 此处有两种情况分开处理:
|
||||||
// ---- 情况1:在SSO认证中心尚未登录,需要先去登录
|
// ---- 情况1:在SSO认证中心尚未登录,需要先去登录
|
||||||
if(stpLogic.isLogin() == false) {
|
if(stpLogic.isLogin() == false) {
|
||||||
return cfg.notLoginView.get();
|
return cfg.getNotLoginView().get();
|
||||||
}
|
}
|
||||||
// ---- 情况2:在SSO认证中心已经登录,需要重定向回 Client 端,而这又分为两种方式:
|
// ---- 情况2:在SSO认证中心已经登录,需要重定向回 Client 端,而这又分为两种方式:
|
||||||
String mode = req.getParam(ParamName.mode, "");
|
String mode = req.getParam(ParamName.mode, "");
|
||||||
@@ -101,7 +101,7 @@ public class SaSsoHandle {
|
|||||||
SaSsoConfig cfg = SaManager.getConfig().getSso();
|
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);
|
SaSsoUtil.checkSecretkey(secretkey);
|
||||||
|
|
||||||
// step.2 遍历通知Client端注销会话
|
// step.2 遍历通知Client端注销会话
|
||||||
SaSsoUtil.forEachSloUrl(loginId, url -> cfg.sendHttp.apply(url));
|
SaSsoUtil.forEachSloUrl(loginId, url -> cfg.getSendHttp().apply(url));
|
||||||
|
|
||||||
// step.3 Server端注销
|
// step.3 Server端注销
|
||||||
stpLogic.logout(loginId);
|
stpLogic.logout(loginId);
|
||||||
@@ -190,17 +190,17 @@ public class SaSsoHandle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ---------- SSO-Client端:单点注销 [模式二]
|
// ---------- SSO-Client端:单点注销 [模式二]
|
||||||
if(req.isPath(Api.ssoLogout) && cfg.isSlo && cfg.isHttp == false) {
|
if(req.isPath(Api.ssoLogout) && cfg.getIsSlo() && cfg.getIsHttp() == false) {
|
||||||
return ssoLogoutType2();
|
return ssoLogoutType2();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------- SSO-Client端:单点注销 [模式三]
|
// ---------- SSO-Client端:单点注销 [模式三]
|
||||||
if(req.isPath(Api.ssoLogout) && cfg.isSlo && cfg.isHttp) {
|
if(req.isPath(Api.ssoLogout) && cfg.getIsSlo() && cfg.getIsHttp()) {
|
||||||
return ssoLogoutType3();
|
return ssoLogoutType3();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------- SSO-Client端:单点注销的回调 [模式三]
|
// ---------- SSO-Client端:单点注销的回调 [模式三]
|
||||||
if(req.isPath(Api.ssoLogoutCall) && cfg.isSlo && cfg.isHttp) {
|
if(req.isPath(Api.ssoLogoutCall) && cfg.getIsSlo() && cfg.getIsHttp()) {
|
||||||
return ssoLogoutCall();
|
return ssoLogoutCall();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -240,8 +240,8 @@ public class SaSsoHandle {
|
|||||||
Object loginId = checkTicket(ticket, Api.ssoLogin);
|
Object loginId = checkTicket(ticket, Api.ssoLogin);
|
||||||
|
|
||||||
// Be: 如果开发者自定义了处理逻辑
|
// Be: 如果开发者自定义了处理逻辑
|
||||||
if(cfg.ticketResultHandle != null) {
|
if(cfg.getTicketResultHandle() != null) {
|
||||||
return cfg.ticketResultHandle.apply(loginId, back);
|
return cfg.getTicketResultHandle().apply(loginId, back);
|
||||||
}
|
}
|
||||||
// ------- 2、如果loginId有值,说明ticket有效,进行登录并重定向至back地址
|
// ------- 2、如果loginId有值,说明ticket有效,进行登录并重定向至back地址
|
||||||
if(loginId != null ) {
|
if(loginId != null ) {
|
||||||
@@ -289,7 +289,7 @@ public class SaSsoHandle {
|
|||||||
|
|
||||||
// 调用SSO-Server认证中心API,进行注销
|
// 调用SSO-Server认证中心API,进行注销
|
||||||
String url = SaSsoUtil.buildSloUrl(stpLogic.getLoginId());
|
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) {
|
if(SaSsoConsts.OK.equals(body) == false) {
|
||||||
return SaResult.error("单点注销失败");
|
return SaResult.error("单点注销失败");
|
||||||
}
|
}
|
||||||
@@ -349,14 +349,14 @@ public class SaSsoHandle {
|
|||||||
public static Object checkTicket(String ticket, String currUri) {
|
public static Object checkTicket(String ticket, String currUri) {
|
||||||
SaSsoConfig cfg = SaManager.getConfig().getSso();
|
SaSsoConfig cfg = SaManager.getConfig().getSso();
|
||||||
// --------- 两种模式
|
// --------- 两种模式
|
||||||
if(cfg.isHttp) {
|
if(cfg.getIsHttp()) {
|
||||||
// 模式三:使用http请求校验ticket
|
// 模式三:使用http请求校验ticket
|
||||||
String ssoLogoutCall = null;
|
String ssoLogoutCall = null;
|
||||||
if(cfg.isSlo) {
|
if(cfg.getIsSlo()) {
|
||||||
ssoLogoutCall = SaHolder.getRequest().getUrl().replace(currUri, Api.ssoLogoutCall);
|
ssoLogoutCall = SaHolder.getRequest().getUrl().replace(currUri, Api.ssoLogoutCall);
|
||||||
}
|
}
|
||||||
String checkUrl = SaSsoUtil.buildCheckTicketUrl(ticket, 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);
|
return (SaFoxUtil.isEmpty(body) ? null : body);
|
||||||
} else {
|
} else {
|
||||||
// 模式二:直连Redis校验ticket
|
// 模式二:直连Redis校验ticket
|
||||||
|
@@ -382,7 +382,7 @@ public class SaSsoTemplate {
|
|||||||
*/
|
*/
|
||||||
public Object getUserinfo(Object loginId) {
|
public Object getUserinfo(Object loginId) {
|
||||||
String url = buildUserinfoUrl(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:
|
redis:
|
||||||
# Redis数据库索引(默认为0)
|
# Redis数据库索引(默认为0)
|
||||||
database: 1
|
database: 15
|
||||||
# Redis服务器地址
|
# Redis服务器地址
|
||||||
host: 127.0.0.1
|
host: 192.168.101.202
|
||||||
# Redis服务器连接端口
|
# Redis服务器连接端口
|
||||||
port: 6379
|
port: 30068
|
||||||
# Redis服务器连接密码(默认为空)
|
# Redis服务器连接密码(默认为空)
|
||||||
# password:
|
# password:
|
||||||
# 连接超时时间(毫秒)
|
# 连接超时时间(毫秒)
|
||||||
@@ -35,7 +35,7 @@ spring:
|
|||||||
max-idle: 10
|
max-idle: 10
|
||||||
# 连接池中的最小空闲连接
|
# 连接池中的最小空闲连接
|
||||||
min-idle: 0
|
min-idle: 0
|
||||||
|
password: 123456
|
||||||
|
|
||||||
|
|
||||||
|
|
@@ -223,6 +223,13 @@ public class SaOAuth2Config implements Serializable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return 函数 OAuth-Server端:未登录时返回的View
|
||||||
|
*/
|
||||||
|
public Supplier<Object> getNotLoginView() {
|
||||||
|
return notLoginView;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param confirmView OAuth-Server端:确认授权时返回的View
|
* @param confirmView OAuth-Server端:确认授权时返回的View
|
||||||
* @return 对象自身
|
* @return 对象自身
|
||||||
@@ -232,6 +239,13 @@ public class SaOAuth2Config implements Serializable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return 函数 OAuth-Server端:确认授权时返回的View
|
||||||
|
*/
|
||||||
|
public BiFunction<String, String, Object> getConfirmView() {
|
||||||
|
return confirmView;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param doLoginHandle OAuth-Server端:登录函数
|
* @param doLoginHandle OAuth-Server端:登录函数
|
||||||
* @return 对象自身
|
* @return 对象自身
|
||||||
@@ -241,6 +255,12 @@ public class SaOAuth2Config implements Serializable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return 函数 OAuth-Server端:登录函数
|
||||||
|
*/
|
||||||
|
public BiFunction<String, String, Object> getDoLoginHandle() {
|
||||||
|
return doLoginHandle;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
@@ -41,7 +41,7 @@ public class SaOAuth2Handle {
|
|||||||
// 模式一:Code授权码
|
// 模式一:Code授权码
|
||||||
if(req.isPath(Api.authorize) && req.isParam(Param.response_type, ResponseType.code)) {
|
if(req.isPath(Api.authorize) && req.isParam(Param.response_type, ResponseType.code)) {
|
||||||
SaClientModel cm = currClientModel();
|
SaClientModel cm = currClientModel();
|
||||||
if(cfg.isCode && (cm.isCode || cm.isAutoMode)) {
|
if(cfg.getIsCode() && (cm.isCode || cm.isAutoMode)) {
|
||||||
return authorize(req, res, cfg);
|
return authorize(req, res, cfg);
|
||||||
}
|
}
|
||||||
throw new SaOAuth2Exception("暂未开放的授权模式");
|
throw new SaOAuth2Exception("暂未开放的授权模式");
|
||||||
@@ -75,7 +75,7 @@ public class SaOAuth2Handle {
|
|||||||
// 模式二:隐藏式
|
// 模式二:隐藏式
|
||||||
if(req.isPath(Api.authorize) && req.isParam(Param.response_type, ResponseType.token)) {
|
if(req.isPath(Api.authorize) && req.isParam(Param.response_type, ResponseType.token)) {
|
||||||
SaClientModel cm = currClientModel();
|
SaClientModel cm = currClientModel();
|
||||||
if(cfg.isImplicit && (cm.isImplicit || cm.isAutoMode)) {
|
if(cfg.getIsImplicit() && (cm.isImplicit || cm.isAutoMode)) {
|
||||||
return authorize(req, res, cfg);
|
return authorize(req, res, cfg);
|
||||||
}
|
}
|
||||||
throw new SaOAuth2Exception("暂未开放的授权模式");
|
throw new SaOAuth2Exception("暂未开放的授权模式");
|
||||||
@@ -84,7 +84,7 @@ public class SaOAuth2Handle {
|
|||||||
// 模式三:密码式
|
// 模式三:密码式
|
||||||
if(req.isPath(Api.token) && req.isParam(Param.grant_type, GrantType.password)) {
|
if(req.isPath(Api.token) && req.isParam(Param.grant_type, GrantType.password)) {
|
||||||
SaClientModel cm = currClientModel();
|
SaClientModel cm = currClientModel();
|
||||||
if(cfg.isPassword && (cm.isPassword || cm.isAutoMode)) {
|
if(cfg.getIsPassword() && (cm.isPassword || cm.isAutoMode)) {
|
||||||
return password(req, res, cfg);
|
return password(req, res, cfg);
|
||||||
}
|
}
|
||||||
throw new SaOAuth2Exception("暂未开放的授权模式");
|
throw new SaOAuth2Exception("暂未开放的授权模式");
|
||||||
@@ -93,7 +93,7 @@ public class SaOAuth2Handle {
|
|||||||
// 模式四:凭证式
|
// 模式四:凭证式
|
||||||
if(req.isPath(Api.client_token) && req.isParam(Param.grant_type, GrantType.client_credentials)) {
|
if(req.isPath(Api.client_token) && req.isParam(Param.grant_type, GrantType.client_credentials)) {
|
||||||
SaClientModel cm = currClientModel();
|
SaClientModel cm = currClientModel();
|
||||||
if(cfg.isClient && (cm.isClient || cm.isAutoMode)) {
|
if(cfg.getIsClient() && (cm.isClient || cm.isAutoMode)) {
|
||||||
return clientToken(req, res, cfg);
|
return clientToken(req, res, cfg);
|
||||||
}
|
}
|
||||||
throw new SaOAuth2Exception("暂未开放的授权模式");
|
throw new SaOAuth2Exception("暂未开放的授权模式");
|
||||||
@@ -114,7 +114,7 @@ public class SaOAuth2Handle {
|
|||||||
|
|
||||||
// 1、如果尚未登录, 则先去登录
|
// 1、如果尚未登录, 则先去登录
|
||||||
if(StpUtil.isLogin() == false) {
|
if(StpUtil.isLogin() == false) {
|
||||||
return cfg.notLoginView.get();
|
return cfg.getNotLoginView().get();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2、构建请求Model
|
// 2、构建请求Model
|
||||||
@@ -129,7 +129,7 @@ public class SaOAuth2Handle {
|
|||||||
// 5、判断:如果此次申请的Scope,该用户尚未授权,则转到授权页面
|
// 5、判断:如果此次申请的Scope,该用户尚未授权,则转到授权页面
|
||||||
boolean isGrant = SaOAuth2Util.isGrant(ra.loginId, ra.clientId, ra.scope);
|
boolean isGrant = SaOAuth2Util.isGrant(ra.loginId, ra.clientId, ra.scope);
|
||||||
if(isGrant == false) {
|
if(isGrant == false) {
|
||||||
return cfg.confirmView.apply(ra.clientId, ra.scope);
|
return cfg.getConfirmView().apply(ra.clientId, ra.scope);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6、判断授权类型
|
// 6、判断授权类型
|
||||||
@@ -226,7 +226,7 @@ public class SaOAuth2Handle {
|
|||||||
* @return 处理结果
|
* @return 处理结果
|
||||||
*/
|
*/
|
||||||
public static Object doLogin(SaRequest req, SaResponse res, SaOAuth2Config cfg) {
|
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");
|
SaHolder.getStorage().set(StpUtil.stpLogic.splicingKeyJustCreatedSave(), "no-token");
|
||||||
|
|
||||||
// 4、调用API 开始登录,如果没能成功登录,则直接退出
|
// 4、调用API 开始登录,如果没能成功登录,则直接退出
|
||||||
Object retObj = cfg.doLoginHandle.apply(username, password);
|
Object retObj = cfg.getDoLoginHandle().apply(username, password);
|
||||||
if(StpUtil.isLogin() == false) {
|
if(StpUtil.isLogin() == false) {
|
||||||
return retObj;
|
return retObj;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user