DaaS 服务端 Java二次开发指南-Lesson 1: Hello World

718 阅读3分钟

回到目录

Lesson 1: Hello World

先来看两个概念 Manager Bean和 checkAccess

Manager Bean

每个模型对象,在系统中都会生成对应的若干java类,其中最重要的是 manager bean。

命名规则是 “<模型名字>ManagerImpl”,在项目的配置文件中注册的bean ID为 “<模型名字>Manager”。

这个bean的名字是REST接口中的一部分,后面会详细介绍,这里了解一下就可以了。

checkAccess

每个manager bean都会实现一个 checkAccess 方法,用于校验调用方是否有合适的权限。默认每个请求都需要具备某个合法的“APP”的身份。后面会详细介绍,这里只需知道每一个REST调用,需要首先通过checkAccess的校验。

添加sayHello接口

前面说过REST接口中需要一个 manager bean。

以 daas-start-kit 自带的模型定义文件 bank.xml 为例,我们这次选择 ‘platform’作为我们的 hello world 接口的承载者。

它对应的manager类文件就是:

PlatformManagerImpl.java

找到这个文件,在最后追加一个函数:

public String sayHello(BankUserContext userContext)
    throws Exception{
    return "hello world";
}

注意:函数的第一个参数“BankUserContext userContext”。

这个是所有接口的第一个参数。命名规范是 xxxUserContext. (XXX 表示您的项目名称)

也可以在项目中扩展它,后面的例子中会演示如何使用和扩展userContext。

编译运行

如 daas-start-kit 文档所述,在项目目录下执行 "gradle bootRun"

调用sayHello接口

首先我们要确定REST接口的正确URL。 URL的格式为:

http(s)://<host:port>/<context>/<manager bean>/<method><param 1>/<param 2>/..../<param n>/

注意最后结尾的“/”,这个/是必须的,任何时候不要忘记所有URL都是以/结尾,不能省略

假设:

  • 我们直接在本地,用daas-start-kit 运行了一个应用,

    URL=http://localhost:8080/...

  • 我们使用的模型是 bank,以其作为context

    URL=http://localhost:8080/bank/...

  • 我们选择 platform 来处理请求

    URL=http://localhost:8080/bank/platformManager/...

  • 我们要调用 sayHello 方法

    URL=http://localhost:8080/bank/platformManager/sayHello/...

  • 我们没有其他的参数

    URL=http://localhost:8080/bank/platformManager/sayHello/

所以最终的URL是 http://localhost:8080/bank/platformManager/sayHello/

简单的使用curl来访问它:

curl http://localhost:8080/bank/platformManager/sayHello/

目前应该会得到一个错误提示:

{"class":"com.demo.bank.LoginForm","errorMessage":"没有选择App","usernameParmeter":null,"passwordParmeter":null}

例如我的显示如下图:

这里的消息“没有选择APP”,就是因为我们前面提到的,‘checkAccess方法’的作用结果。

实现自己的访问控制

还是在 PlatformManagerImpl.java 文件中,重载checkAccess方法。 假设我们不对sayHello做权限检查,允许任何人都可以调用它,代码如下:

@Override
public Object checkAccess(BaseUserContext baseUserContext, String methodName, 
        Object[] parameters)  throws IllegalAccessException {
    if ("sayHello".equals(methodName)) {
        return accessOK();
    }
    return super.checkAccess(baseUserContext, methodName, parameters);
}

调用!成功!

再次编译运行: gradle bootRun

再次调用:curl http://localhost:8080/bank/platformManager/sayHello/

得到结果:"hello world" (这是一个JSON字符串,注意包围它的双引号)

我使用postman调用的结果截图如下:

目前为止,你就实现了自己的方法,并且知道了如何去访问它,并已JSON的格式得到结果。

下一步

本节内容仅用来说明“方法-调用-结果”的关系。实际项目中,这样做是不合适的,主要原因是类似‘PlatformManagerImpl.java’这样的代码,是会在每次生成代码时被覆盖的。应该在自己的定制类里实现定制代码;

下一步我们来了解,如何扩展manager bean来实现项目的定制化代码。

回到目录