Skip to content

常见问题

如何修改登录状态过期时间?

目前默认的配置非活跃情况下两小时登录状态过期,如不能满足需求可按照自己的需求再调整相应的配置 y9-digitalbase-webapp/y9-module-sso/risenet-y9boot-webapp-sso-server/src/main/resources/application.yml (也可能是 y9-digitalbase-webapp/y9-module-sso/risenet-y9boot-webapp-sso-server-jpa/src/main/resources/application.yml,根据自己使用的版本调整即可):

cas:
    authn:
        oauth:
            refreshToken:
                timeToKillInSeconds: P14D # refreshToken 有效时长
            accessToken:
                timeToKillInSeconds: PT2H # accessToken 不活跃时(即没有使用 accessToken 的动作)的有效时长
                maxTimeToLiveInSeconds: PT8H # accessToken 在活跃时(即有使用 accessToken 的动作)的最长有效时长
    ticket:
        tgt:
            primary:
                maxTimeToLiveInSeconds: 28800 # tgt 在活跃时(即有使用 tgt 的动作)的最长有效时长
                timeToKillInSeconds: 7200 # tgt 不活跃时(即没有使用 tgt 的动作)的有效时长

注意: 由于 accessToken 和 refreshToken 的颁发都依赖于 tgt,所以他们的最短时间取决于 tgt 的有效时间

如何打 docker 镜像?

数字底座使用 Google 容器构建工具 Jib 构建 docker 镜像,它可以不依赖于 docker 守护进程即可进行多平台的分层构建 docker 镜像,更多详细信息可查看 jib 开源网站

  • 首先,在根 pom.xml 中,声明了 jib-maven-plugin 插件并进行了一些配置,可根据自己的需求查看官方文档进行调整
xml
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>com.google.cloud.tools</groupId>
                    <artifactId>jib-maven-plugin</artifactId>
                    <version>${jib-maven-plugin.version}</version>
                    <configuration>
                        <skip>false</skip>
                        <from>
                            <!-- 基础镜像 -->
                            <image>docker-internal.youshengyun.com/tomcat:9.0-jre11-temurin</image>
                            <platforms>
                                <platform>
                                    <architecture>amd64</architecture>
                                    <os>linux</os>
                                </platform>
                                <platform>
                                    <architecture>arm64</architecture>
                                    <os>linux</os>
                                </platform>
                            </platforms>
                        </from>
                        <container>
                            <appRoot>/usr/local/tomcat/webapps/${project.build.finalName}</appRoot>
                        </container>
                        <to>
                            <!-- 构建的镜像名 -->
                            <image>docker-registry-internal.youshengyun.com/${project.artifactId}</image>
                            <tags>
                                <tag>${project.version}</tag>
                                <tag>v9.6.x</tag>
                                <tag>${project.version}-${buildDate}</tag>
                            </tags>
                        </to>
                    </configuration>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>build</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

在上面配置中,docker 仓库为私有仓库,您需要调整为自己的仓库地址,仓库可能需要相应的认证授权

  • 然后,在构建镜像的模块中使用该插件即可,例如在 y9-digitalbase-webapp/y9-module-platform/risenet-y9boot-webapp-platform/pom.xml 中:
xml
    <profiles>
        <profile>
            <id>build-docker-image</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.google.cloud.tools</groupId>
                        <artifactId>jib-maven-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

使用 maven 进行构建时使 build-docker-image 这个 profile 生效即可应用这个插件构建 docker 镜像,命令行示例:

shell
$ mvn clean install -P build-docker-image

是否可以使用内嵌 servlet 容器部署?

可以,在数字底座中已添加了内嵌 tomcat 依赖,并使用 spring-boot-maven-plugin 来生成可执行 war,对应的可执行 war 构建完成后即可使用 java -jar 运行

例如 risenet-y9boot-webapp-platform 模块构建完成后会在 target 目录下生成 platform.war,通过命令 java -jar platform.war 即可运行该模块

如何使用 SpringCloud 的服务注册与发现?

已有的模块中都加入了 risenet-y9boot-common-nacos 这个依赖,该依赖中引入了用于服务注册与发现的 spring-cloud-starter-alibaba-nacos-discovery

当然,我们得先部署 Nacos,可以参考官方文档部署手册进行部署。

修改模块配置文件 application.yml,以下为示例,需根据实际情况修改

yaml
spring:
    cloud:
        nacos:
            server-addr: nacos:8848
            username: nacos
            password: ${NACOS_PASSWORD:111111}
            discovery:
                enabled: true # 启用服务注册与发现的功能
                group: DEFAULT_GROUP
                namespace: test

由于各个模块中实现的 FeignClient 的配置类似如下:

java
@FeignClient(contextId = "AccessLogApiClient", name = "${y9.service.log.name:log}",
    url = "${y9.service.log.directUrl:}", path = "/${y9.service.log.name:log}/services/rest/v1/accessLog")
public interface AccessLogApiClient extends AccessLogApi {

}

由上可知道当 FeignClient 中 url 配置不为空时,它会使用对应的配置直接调用接口(这个在开发阶段较为便利,少了中间件 Nacos 的安装),如果为空则尝试服务发现的功能, 所以对于要使用服务发现的模块,则可以将对应的配置项置空,参考如下:

yaml
y9:
    service:
        log:
            directUrl:

经过以上配置,我们应该已经可以使用服务注册与发现的功能了

如何使用 SpringCloud 的远程配置?

已有的模块中都加入了 risenet-y9boot-common-nacos 这个依赖,该依赖中引入了用于远程配置的 spring-cloud-starter-alibaba-nacos-config

当然,我们得先部署 Nacos,可以参考官方文档部署手册进行部署。

修改模块配置文件 application.yml,以下为示例,需根据实际情况修改

yaml
spring:
    cloud:
        nacos:
            server-addr: nacos:8848
            username: nacos
            password: ${NACOS_PASSWORD:111111}
            config:
                enabled: true # 启用远程配置的功能
                group: DEFAULT_GROUP
                namespace: test
    config:
        import:
            - optional:nacos:platform.yml

经过以上配置,我们应该已经可以使用远程配置的功能了。 在项目 bootstrap 阶段,项目会从 Nacos test 命名空间 DEFAULT_GROUP 组中拉取 platform.yml 配置文件(当然,我们对应的配置文件要存在,Nacos 安装完成后我们可以登录后台创建),并将其加载到 Spring 环境中。 根据 Spring 配置的优先级,我们可以拿到 Nacos 远程配置中的配置信息。

数字底座启动报错

报错 1

java
Caused by: java.lang.NullPointerException: null
	at net.risesoft.log.aop.RiseLogAdvice.<init>(RiseLogAdvice.java:48)

这个大概率是配置文件 application.yml 的问题,可以尝试修改 y9.internalIp 这一段,加入你网络所在的网段然后重启应用

yaml
y9:
    internalIp: 192.168.x.x,10.0.x.x,172.20.x.x

Released under the GPL-3.0 License.