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
发布了39 篇原创文章 · 获赞 58 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43968234/article/details/94428151