## 新建微服务子系统 为了规范,建议将微服务子系统添加到febs-server层级下。在febs-server上右键新增一个Module: ![JmK7FS.png](https://s1.ax1x.com/2020/04/18/JmK7FS.png) 选择Spring Initializr: ![JmMZex.png](https://s1.ax1x.com/2020/04/18/JmMZex.png) 如下所示填写相关内容: ![JmMlSH.png](https://s1.ax1x.com/2020/04/18/JmMlSH.png) 点击Next,跳过依赖选择,直接点击Next: ![Jml9xJ.png](https://s1.ax1x.com/2020/04/18/Jml9xJ.png) 点击Finish: ![Jmlwss.png](https://s1.ax1x.com/2020/04/18/Jmlwss.png) 修改项目的pom,改后如下所示: ```xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>cc.mrbird</groupId> <artifactId>febs-server</artifactId> <version>2.1-RELEASE</version> <relativePath>../pom.xml</relativePath> </parent> <artifactId>febs-server-hello</artifactId> <name>FEBS-Server-Hello</name> <description>测试</description> <properties> <febs-cloud.version>2.1-RELEASE</febs-cloud.version> </properties> <dependencies> <dependency> <groupId>cc.mrbird</groupId> <artifactId>febs-common-core</artifactId> <version>${febs-cloud.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> ``` 引入了系统核心依赖`febs-common-core`。 修改febs-server的pom,在modules标签下添加该Module: ```xml <modules> <module>febs-server-hello</module> </modules> ``` 因为我们暂时没有整合数据库,所以需要先排除数据库自动装配,修改启动类: ```java @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) public class FebsServerHelloApplication { public static void main(String[] args) { SpringApplication.run(FebsServerHelloApplication.class, args); } } ``` 删掉resources目录下的application.properties,新建bootstrap.yml,内容如下所示: ```yml spring: application: name: FEBS-Server-Hello cloud: nacos: config: server-addr: ${nacos.url}:8001 group: DEFAULT_GROUP prefix: febs-server-hello file-extension: yaml discovery: server-addr: ${nacos.url}:8001 ``` 主要配置了服务名称为FEBS-Server-Hello,指定了Nacos配置中心和注册中心的地址。因为Nacos地址使用`${nacos.url}`变量表示,所以我们需要在IDEA环境变量中添加该配置: ![Jm3CH1.png](https://s1.ax1x.com/2020/04/18/Jm3CH1.png) 接着在Nacos控制台中新建febs-server-hello.yaml配置: ![Jm8Fqs.png](https://s1.ax1x.com/2020/04/18/Jm8Fqs.png) 配置添加好后,我们添加一个controller,对外暴露一个服务。在cc.mrbird.febs.server.hello目录下新建controller包,然后在该包下新建TestController: ```java @RestController public class TestController { @GetMapping("test") public String hello(){ return "febs-server-hello ;)"; } } ``` 为了让项目成功启动后,控制台打印的日志更有仪式感,我们新增一个runner。在cc.mrbird.febs.server.hello目录下新建runner包,然后在该包下新建StartedUpRunner: ```java @Component @RequiredArgsConstructor public class StartedUpRunner implements ApplicationRunner { private final ConfigurableApplicationContext context; private final Environment environment; @Override public void run(ApplicationArguments args) { if (context.isActive()) { FebsUtil.printSystemUpBanner(environment); } } } ``` ## 引入安全配置 为了让刚刚添加的hello接口受febs-auth的保护,我们需要添加一些安全配置。在pom文件中引入febs-common-security-starter依赖: ```xml <dependencies> <dependency> <groupId>cc.mrbird</groupId> <artifactId>febs-common-security-starter</artifactId> <version>${febs-cloud.version}</version> </dependency> </dependencies> ``` 因为febs-common-security-starter依赖已经包含了febs-common-core,所以上面我们只需引入febs-common-security-starter即可。 接着在bootstrap.yml中添加如下配置(你也可以在Nacos控制台的febs-server-hello.yaml中添加,为了方便我就直接在bootstrap.yml中添加了),用于开启接口保护: ```yml febs: cloud: security: enable: true security: oauth2: resource: id: ${spring.application.name} user-info-uri: http://${febs-gateway}:8301/auth/user ``` `febs.cloud.security.enable`设置为true开启接口保护(添加该配置后,系统的所有对外暴露的接口都需要令牌才能访问,如果希望添加免认证接口,可以通过`febs.cloud.security.anon-uris`配置指定。),`security.oauth2.resource.user-info-uri`用于指定febs-auth的`/user`地址(原因参考搭建教程)。 因为我们在配置中使用`${febs-gateway}`变量代表febs-gateway地址,所以我们需要在IDEA环境变量中添加该配置: ![JmNG80.png](https://s1.ax1x.com/2020/04/18/JmNG80.png) 添加好配置后,在系统入口类上添加`@EnableFebsCloudResourceServer`注解,开启资源服务器配置: ```java @EnableFebsCloudResourceServer @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) public class FebsServerHelloApplication { public static void main(String[] args) { SpringApplication.run(FebsServerHelloApplication.class, args); } } ``` ## 接口测试 为了能够通过网关访问FEBS-Server-Hello,我们需要在网关配置中添加一些配置。修改Nacos控制台中febs-gateway.yaml配置: ![JmG5cD.png](https://s1.ax1x.com/2020/04/18/JmG5cD.png) ```yml spring: cloud: gateway: routes: - id: FEBS-Server-Hello uri: lb://FEBS-Server-Hello predicates: - Path=/hello/** filters: - name: Hystrix args: name: hellofallback fallbackUri: forward:/fallback/FEBS-Server-Hello ``` 添加好后,启动febs-server-hello: ``` ----------------------------------------- 服务启动成功,时间:2020-04-01 16:29:14 服务名称:FEBS-Server-Hello 端口号:8205 ----------------------------------------- ``` 使用postman测试/hello接口(令牌的获取方式参考[postman测试](https://www.kancloud.cn/mrbird/spring-cloud/1268278)): ![Jmam7Q.png](https://s1.ax1x.com/2020/04/18/Jmam7Q.png) 接口访问成功。不添加令牌时候: ![JmaJnU.png](https://s1.ax1x.com/2020/04/18/JmaJnU.png) 结果返回401,访问令牌不合法时: ![JmazvV.png](https://s1.ax1x.com/2020/04/18/JmazvV.png) 不通过网关,直接访问微服务接口时: ![Jmwwy6.png](https://s1.ax1x.com/2020/04/18/Jmwwy6.png) 至此,我们已经成功将febs-server-hello整合到FEBS-Cloud中了。