SSO單點登錄(五)服務端集成dubbo版本

目錄

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章