目錄
SSO單點登錄(一)理論知識總結
SSO單點登錄(二)基於redis的服務端
SSO單點登錄(三)基於session的服務端
SSO單點登錄(四)客戶端的設計與實現
SSO單點登錄(五)服務端集成dubbo版本
持續更新中…
回顧一下章節二、三,寫的都是服務端,也就是SSO中心要做的事情,但是提供都是http接口,所以章節四對接的時候用的http接口去請求的,那麼集成dubbo,利用rpc接口如何實現呢?
第一步 依賴少不了
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<curator-framework.version>4.0.1</curator-framework.version>
<zookeeper.version>3.4.13</zookeeper.version>
<dubbo.starter.version>0.2.0</dubbo.starter.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.starter.version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>${curator-framework.version}</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>${zookeeper.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
第二步 rpc接口出入參定義
- 入參
import lombok.Data;
import java.io.Serializable;
/**
* @author yanghao
* @version ApplyAuthParam.java, v 0.1 2019-07-02 08:06
*/
@Data
public class ApplyAuthParam implements Serializable {
private static final long serialVersionUID = -1192199423675016946L;
/**
* 登錄token
*/
private String token;
/**
* 跳轉url
*/
private String indexUrl;
}
- 出參
import lombok.Data;
import java.io.Serializable;
/**
* @author yanghao
* @version ApiResult.java, v 0.1 2019-07-02 08:08
*/
@Data
public class ApiResult<T> implements Serializable {
private static final long serialVersionUID = -2547026529446900321L;
/**
* 請求是否成功
*/
private boolean success;
/**
* 返回的的數據
*/
private T data;
/**
* 錯誤代碼
*/
private String errorCode;
/**
* 錯誤消息
*/
private String errorMsg;
/**
* 成功請求
* success : true
* errorCode : 默認 2000
* errorMsg : 默認 ""
*/
public static <T> ApiResult<T> success(T data) {
return new ApiResult<>(true, data, "2000", "");
}
public static <T> ApiResult<T> error(String errorCode, String errorMsg) {
return new ApiResult<>(false, null, errorCode, errorMsg);
}
public ApiResult(boolean success, T data, String errorCode, String errorMsg) {
this.success = success;
this.data = data;
this.errorCode = errorCode;
this.errorMsg = errorMsg;
}
}
第三步 包裝rpc接口
- facade接口
/**
* @author yanghao
* @version AuthFacade.java, v 0.1 2019-07-02 08:12
*/
public interface AuthFacade {
/**
* Desc: 申請認證
* @param param
* @return
*/
ApiResult applyAuth(ApplyAuthParam param);
}
- facade實現類
/**
* @author yanghao
* @version AuthFacade.java, v 0.1 2019-07-02 08:18
*/
@Slf4j
@Service(version = "${dubbo.version}")
public class AuthFacadeImpl implements AuthFacade {
@Autowired
private AuthService authService;
@Override
public ApiResult applyAuth(ApplyAuthParam param) {
//調用章節二里面的applyAuth接口
AuthResult result = authService.applyAuth(param.getToken, param.getIndexUrl);
return ApiResult.success(result);
}
}
注:dubbo版本號等參數自行配置一下,可參考如下:
#版本號
dubbo.version = 1.0.0
#協議
dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880
#zk地址
dubbo.registry.address = ...
#超時時間
dubbo.provider.timeout = 1000
ok,截止此時,服務端既提供了http接口,也提供了rpc接口(提醒:想調用rpc接口,客戶端需要與服務端在同一個註冊中心)
現在越來越多的項目使用的框架不同,所以sso的設計也在不斷變化,打破了最初傳統,我們要滿足更多的項目, 所以我們的能力也要越強,這樣纔是一個好的sso服務端。
備註
- 編碼臨時做的,不嚴謹的地方請包涵,重在表達核心邏輯思想
- 本文由作者原創,轉載請表明出處https://blog.csdn.net/weixin_43968234/article/details/94428151