This is an automated email from the ASF dual-hosted git repository. mabin pushed a commit to branch houserush-sample in repository https://gitbox.apache.org/repos/asf/servicecomb-samples.git
commit f46f134e4e2d353fc2405eb7a34e757fd97c66e1 Author: liubao <[email protected]> AuthorDate: Tue Apr 16 14:12:37 2019 +0800 fix review comments and add internal access demo --- porter_lightweight/README.md | 4 +-- .../porter/file/api/InternalAccessEndpoint.java | 38 ++++++++++++++++++++++ .../porter/file/api/InternalAccessService.java | 5 +++ .../file/service/InternalAccessServiceImpl.java | 28 ++++++++++++++++ .../porter/gateway/InternalAccessHandler.java | 37 +++++++++++++++++++++ .../src/main/resources/config/cse.handler.xml | 6 ++-- .../src/main/resources/microservice.yaml | 2 +- 7 files changed, 115 insertions(+), 5 deletions(-) diff --git a/porter_lightweight/README.md b/porter_lightweight/README.md index 93d7bd5..297dbb6 100644 --- a/porter_lightweight/README.md +++ b/porter_lightweight/README.md @@ -80,7 +80,7 @@ java $JAVA_OPT -Dgateway.webroot=webapp -jar porter-gateway-service-0.0.1-SNAPSH 3. 删除文件:输入上一步的文件ID,点击删除。 如果是admin用户,上传成功;如果是guest用户,上传失败。 # 接口使用说明 -ServiceComb推荐先定义接口,再定义实现的开发模式。将接口定义为一个独立项目,可以由设计者统一管控,对于接口的修改,需要设计者进行审核。先定义接口还可以让开发者培养良好的开发习惯,避免将对外接口采用内部实现数据结构(比如JsonObject)、运行平台有关的数据结构(比如HttpServletResponse)来定义,使得以后将项目改在为其他技术框架变得复杂。采用这种方式组织的项目,用户很容易在不同的开发框架上进行迁移,比如gRPC、Spring Cloud等。这里的接口定义代码,对于这些运行框架都是通用的,并且具备跨平台特性。 +ServiceComb推荐先定义接口,再定义实现的开发模式。将接口定义为一个独立项目,可以由设计者统一管控,对于接口的修改,需要设计者进行审核。先定义接口还可以让开发者培养良好的开发习惯,避免将对外接口采用内部实现数据结构(比如JsonObject)、运行平台有关的数据结构(比如HttpServletResponse、HttpServletRequest)来定义,使得以后将项目改造为其他技术框架变得复杂。采用这种方式组织的项目,用户很容易在不同的开发框架上进行迁移,比如gRPC、Spring Cloud等。这里的接口定义代码,对于这些运行框架都是通用的,并且具备跨平台特性。 ## 对于接口实现者(provider) * 依赖api对应的jar包 @@ -112,7 +112,7 @@ public class UserServiceImpl implements UserService </dependencies> ``` - * 采用RCP方式调用 + * 采用RPC方式调用 ``` @RpcReference(microserviceName = "user-service", schemaId = "user") private static UserService sserService diff --git a/porter_lightweight/api/file-service/endpoint/src/main/java/org/apache/servicecomb/samples/porter/file/api/InternalAccessEndpoint.java b/porter_lightweight/api/file-service/endpoint/src/main/java/org/apache/servicecomb/samples/porter/file/api/InternalAccessEndpoint.java new file mode 100644 index 0000000..1a7d94d --- /dev/null +++ b/porter_lightweight/api/file-service/endpoint/src/main/java/org/apache/servicecomb/samples/porter/file/api/InternalAccessEndpoint.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.servicecomb.samples.porter.file.api; + +import org.apache.servicecomb.provider.rest.common.RestSchema; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import io.swagger.annotations.Api; + +@RestSchema(schemaId = "InternalAccessEndpoint") +@RequestMapping(path = "/") +@Api(tags = {"INTERNAL"}) +public class InternalAccessEndpoint { + @Autowired + private InternalAccessService internalAccessService; + + @GetMapping(path = "localAccess") + public String localAccess(String name) { + return internalAccessService.localAccess(name); + } +} diff --git a/porter_lightweight/api/file-service/service/src/main/java/org/apache/servicecomb/samples/porter/file/api/InternalAccessService.java b/porter_lightweight/api/file-service/service/src/main/java/org/apache/servicecomb/samples/porter/file/api/InternalAccessService.java new file mode 100644 index 0000000..7e627fb --- /dev/null +++ b/porter_lightweight/api/file-service/service/src/main/java/org/apache/servicecomb/samples/porter/file/api/InternalAccessService.java @@ -0,0 +1,5 @@ +package org.apache.servicecomb.samples.porter.file.api; + +public interface InternalAccessService { + public String localAccess(String name); +} diff --git a/porter_lightweight/file-service/src/main/java/org/apache/servicecomb/samples/porter/file/service/InternalAccessServiceImpl.java b/porter_lightweight/file-service/src/main/java/org/apache/servicecomb/samples/porter/file/service/InternalAccessServiceImpl.java new file mode 100644 index 0000000..d723945 --- /dev/null +++ b/porter_lightweight/file-service/src/main/java/org/apache/servicecomb/samples/porter/file/service/InternalAccessServiceImpl.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.servicecomb.samples.porter.file.service; + +import org.apache.servicecomb.samples.porter.file.api.InternalAccessService; +import org.springframework.stereotype.Service; + +@Service +public class InternalAccessServiceImpl implements InternalAccessService { + public String localAccess(String name) { + return "Hello, " + name; + } +} diff --git a/porter_lightweight/gateway-service/src/main/java/org/apache/servicecomb/samples/porter/gateway/InternalAccessHandler.java b/porter_lightweight/gateway-service/src/main/java/org/apache/servicecomb/samples/porter/gateway/InternalAccessHandler.java new file mode 100644 index 0000000..0b181d8 --- /dev/null +++ b/porter_lightweight/gateway-service/src/main/java/org/apache/servicecomb/samples/porter/gateway/InternalAccessHandler.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.servicecomb.samples.porter.gateway; + +import org.apache.servicecomb.core.Handler; +import org.apache.servicecomb.core.Invocation; +import org.apache.servicecomb.swagger.invocation.AsyncResponse; +import org.apache.servicecomb.swagger.invocation.exception.InvocationException; + +public class InternalAccessHandler implements Handler { + + @Override + public void handle(Invocation invocation, AsyncResponse asyncReponse) throws Exception { + if (invocation.getOperationMeta().getSwaggerOperation().getTags() != null + && invocation.getOperationMeta().getSwaggerOperation().getTags().contains("INTERNAL")) { + asyncReponse.consumerFail(new InvocationException(403, "", "not allowed")); + return; + } + invocation.next(asyncReponse); + } + +} diff --git a/porter_lightweight/gateway-service/src/main/resources/config/cse.handler.xml b/porter_lightweight/gateway-service/src/main/resources/config/cse.handler.xml index 00295f8..e9dd306 100644 --- a/porter_lightweight/gateway-service/src/main/resources/config/cse.handler.xml +++ b/porter_lightweight/gateway-service/src/main/resources/config/cse.handler.xml @@ -16,6 +16,8 @@ --> <config> - <handler id="auth" - class="org.apache.servicecomb.samples.porter.gateway.AuthHandler" /> + <handler id="auth" + class="org.apache.servicecomb.samples.porter.gateway.AuthHandler" /> + <handler id="internalAccess" + class="org.apache.servicecomb.samples.porter.gateway.InternalAccessHandler" /> </config> diff --git a/porter_lightweight/gateway-service/src/main/resources/microservice.yaml b/porter_lightweight/gateway-service/src/main/resources/microservice.yaml index 3bb50fa..2462c7f 100644 --- a/porter_lightweight/gateway-service/src/main/resources/microservice.yaml +++ b/porter_lightweight/gateway-service/src/main/resources/microservice.yaml @@ -37,7 +37,7 @@ servicecomb: handler: chain: Consumer: - default: auth,qps-flowcontrol-consumer,loadbalance + default: internalAccess,auth,qps-flowcontrol-consumer,loadbalance uploads: directory: tmp_for_upload_gateway
