成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring Boot 參考指南(端點)

mozillazg / 2746人閱讀

摘要:在發(fā)出經(jīng)過身份驗證的請求時,被認為是端點的輸入,因此不會緩存響應(yīng)。自定義端點對或的操作通過使用或通過自動公開。端點范圍請求范圍請求可以用于請求資源的一部分,當使用或時,操作將返回一個自動支持范圍請求的。

50. 端點

Actuator端點讓你監(jiān)視和與應(yīng)用程序交互,Spring Boot包含許多內(nèi)置的端點,并允許你添加自己的端點。例如,health端點提供基本的應(yīng)用程序健康信息。

可以啟用或禁用每個多帶帶的端點,這將控制端點是否被創(chuàng)建,以及它的bean是否存在于應(yīng)用程序上下文中,要實現(xiàn)遠程訪問,端點還必須通過JMX或HTTP公開,大多數(shù)應(yīng)用程序選擇HTTP,將端點的ID與/actuator的前綴映射到URL。例如,默認情況下,health端點映射到/actuator/health。

可以使用以下與技術(shù)無關(guān)的端點:

ID 描述 默認啟用
auditevents 公開當前應(yīng)用程序的審計事件信息 Yes
beans 顯示應(yīng)用程序中所有Spring bean的完整列表 Yes
conditions 顯示在配置和自動配置類上評估的條件以及它們是否匹配的原因 Yes
configprops 顯示所有@ConfigurationProperties對照的列表 Yes
env 從Spring的ConfigurableEnvironment中公開屬性 Yes
flyway 顯示已應(yīng)用的任何Flyway數(shù)據(jù)庫遷移 Yes
health 顯示應(yīng)用程序健康信息 Yes
httptrace 顯示HTTP跟蹤信息(默認情況下,最后100個HTTP請求-響應(yīng)交互) Yes
info 顯示任意應(yīng)用程序信息 Yes
loggers 顯示和修改應(yīng)用程序中記錄器的配置 Yes
liquibase 顯示已應(yīng)用的任何Liquibase數(shù)據(jù)庫遷移 Yes
metrics 顯示當前應(yīng)用程序的“指標”信息 Yes
mappings 顯示所有@RequestMapping路徑對照的列表 Yes
scheduledtasks 顯示應(yīng)用程序中調(diào)度的任務(wù) Yes
sessions 允許從Spring session支持的會話存儲中檢索和刪除用戶會話,在使用Spring會話對響應(yīng)性web應(yīng)用程序的支持時不可用 Yes
shutdown 讓應(yīng)用程序優(yōu)雅地關(guān)閉 No
threaddump 執(zhí)行線程轉(zhuǎn)儲 Yes

如果你的應(yīng)用程序是一個web應(yīng)用程序(Spring MVC、Spring WebFlux或Jersey),你可以使用以下附加端點:

ID 描述 默認啟用
heapdump 返回一個GZip壓縮的hprof堆轉(zhuǎn)儲文件 Yes
jolokia 在HTTP上公開JMX bean(當Jolokia在類路徑上時,WebFlux不可用) Yes
logfile 返回日志文件的內(nèi)容(如果是logging.fileloggin.path屬性已經(jīng)設(shè)置了),支持使用HTTP Range header來檢索日志文件內(nèi)容的一部分 Yes
prometheus 公開指標,該格式可以被Prometheus服務(wù)器采集 Yes

要了解有關(guān)Actuator的端點及其請求和響應(yīng)格式的更多信息,請參考多帶帶的API文檔(HTML 或 PDF)。

50.1 啟用端點

默認情況下,除了shutdown之外的所有端點都啟用了,要配置端點的啟動,可以使用它的management.endpoint..enabled屬性,下面的示例啟用關(guān)閉端點:

management.endpoint.shutdown.enabled=true

如果你更喜歡端點opt-in而不是opt-out,設(shè)置management.endpoints.enabled-by-default屬性為false并使用多帶帶的端點啟用屬性來選擇返回,下面的示例啟用info端點并禁用所有其他端點:

management.endpoints.enabled-by-default=false
management.endpoint.info.enabled=true
禁用的端點完全從應(yīng)用程序上下文中刪除,如果你只想更改端點暴露的技術(shù),則使用includeexclude屬性代替。
50.2 公開端點

由于端點可能包含敏感信息,所以應(yīng)該仔細考慮何時公開它們,下表顯示了默認公開的內(nèi)置端點:

ID JMX Web
auditevents Yes No
beans Yes No
conditions Yes No
configprops Yes No
env Yes No
flyway Yes No
health Yes Yes
heapdump N/A No
httptrace Yes No
info Yes Yes
jolokia N/A No
logfile N/A No
loggers Yes No
liquibase Yes No
metrics Yes No
mappings Yes No
prometheus N/A No
scheduledtasks Yes No
sessions Yes No
shutdown Yes No
threaddump Yes No

要更改公開的端點,請使用以下技術(shù)特定的includeexclude屬性:

屬性 默認
management.endpoints.jmx.exposure.exclude
management.endpoints.jmx.exposure.include *
management.endpoints.web.exposure.exclude
management.endpoints.web.exposure.include info, health

include屬性列出了公開的端點的id,exclude屬性列出不應(yīng)公開的端點的id,exclude屬性優(yōu)先于include屬性,includeexclude屬性都可以使用端點id列表進行配置。

例如,要停止在JMX上公開所有端點,并且只公開healthinfo端點,請使用以下屬性:

management.endpoints.jmx.exposure.include=health,info

*可用于選擇所有端點,例如,要通過HTTP公開除envbeans端點之外的所有內(nèi)容,請使用以下屬性:

management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,beans
*在YAML中有特殊的含義,所以如果要包含(或排除)所有端點,請務(wù)必添加引號,如下例所示:
management:
  endpoints:
    web:
      exposure:
        include: "*"
如果你的應(yīng)用程序是對外公開的,我們強烈建議你也保護你的端點。
如果你想要當端點暴露時實現(xiàn)自己的策略,可以注冊EndpointFilter bean。
50.3 HTTP端點安全

你應(yīng)該注意保護HTTP端點的方式,就像保護其他敏感URL一樣,如果存在Spring Security,則使用Spring Security的內(nèi)容協(xié)商策略默認保護端點。如果你希望為HTTP端點配置自定義安全性,例如,只允許具有特定角色的用戶訪問它們,Spring Boot提供了一些方便的RequestMatcher對象,可以與Spring Security結(jié)合使用。

一個典型的Spring安全配置可能如下面的示例所示:

@Configuration
public class ActuatorSecurity extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests()
                .anyRequest().hasRole("ENDPOINT_ADMIN")
                .and()
            .httpBasic();
    }

}

前面的示例使用EndpointRequest.toAnyEndpoint()匹配任何端點的請求,然后確保所有端點都具有ENDPOINT_ADMIN角色,在EndpointRequest上還有幾個其他的matcher方法,詳情請參閱API文檔(HTML 或 PDF)。

如果你將應(yīng)用程序部署到防火墻后,你可能希望可以在不需要身份驗證的情況下訪問所有actuator端點,你可以通過更改management.endpoints.web.exposure.include屬性來實現(xiàn)這一點,如下:

application.properties

management.endpoints.web.exposure.include=*

此外,如果存在Spring Security,則需要添加自定義安全配置,允許對端點進行未經(jīng)身份驗證的訪問,如下面的示例所示:

@Configuration
public class ActuatorSecurity extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests()
            .anyRequest().permitAll()
    }

}
50.4 配置端點

端點為不帶任何參數(shù)的讀取操作自動緩存響應(yīng),要配置端點緩存響應(yīng)的時間量,請使用cache.time-to-live屬性,下面的示例將beans端點緩存的生存時間設(shè)置為10秒:

application.properties

management.endpoint.beans.cache.time-to-live=10s
前綴management.endpoint.用于惟一地標識正在配置的端點。

在發(fā)出經(jīng)過身份驗證的HTTP請求時,Principal被認為是端點的輸入,因此不會緩存響應(yīng)。

50.5 Actuator Web端點的超媒體

一個鏈接所有端點的“discovery頁面”被添加,默認情況下,“ discovery頁面”在/actuator上可用。

配置自定義管理上下文路徑時,“discovery頁面”自動從/actuator移動到管理上下文的根,例如,如果管理上下文路徑是/management,那么可以從/management獲得discovery頁面,當管理上下文路徑被設(shè)置為/時,discovery頁面被禁用,以防止與其他映射發(fā)生沖突。

50.6 Actuator Web端點的路徑

默認情況下,通過使用端點的ID在/actuator路徑下通過HTTP公開端點,例如,beans端點在/actuator/beans下公開,如果希望將端點映射到不同的路徑,可以使用management.endpoints.web.path-mapping屬性,另外,如果你想要更改基本路徑,你可以使用management.endpoints.web.base-path。

以下示例將重新映射/actuator/health/healthcheck:

application.properties

management.endpoints.web.base-path=/
management.endpoints.web.path-mapping.health=healthcheck
50.7 CORS支持

跨源資源共享(CORS)是W3C規(guī)范,允許你靈活地指定授權(quán)的跨域請求類型,如果你使用Spring MVC或Spring WebFlux,可以配置Actuator的web端點來支持這些場景。

CORS支持在默認情況下是禁用的,并且只在management.endpoints.web.cors.allowed-origins屬性已設(shè)置時才啟用,以下配置允許從example.com域GETPOST調(diào)用:

management.endpoints.web.cors.allowed-origins=http://example.com
management.endpoints.web.cors.allowed-methods=GET,POST
有關(guān)選項的完整列表,請參見CorsEndpointProperties
50.8 實現(xiàn)自定義端點

如果你添加一個帶@Endpoint注解的@Bean,那么任何帶@ReadOperation、@WriteOperation@DeleteOperation的方法都會自動地通過JMX公開,在web應(yīng)用程序中,也會通過HTTP公開,可以使用Jersey、Spring MVC或Spring WebFlux通過HTTP公開端點。

你還可以使用@JmxEndpoint@WebEndpoint來編寫特定于技術(shù)的端點,這些端點僅限于各自的技術(shù),例如,@WebEndpoint僅通過HTTP公開,而不是通過JMX公開。

可以使用@EndpointWebExtension@EndpointJmxExtension編寫特定于技術(shù)的擴展,這些注解允許你提供特定于技術(shù)的操作,以增強現(xiàn)有的端點。

最后,如果你需要訪問特定于web框架的功能,你可以實現(xiàn)Servlet或Spring @Controller@RestController端點,代價是它們在JMX上不可用,或者在使用不同的web框架時不可用。

50.8.1 接收輸入

端點上的操作通過它們的參數(shù)接收輸入,當通過web公開時,這些參數(shù)的值取自URL的查詢參數(shù)和JSON請求體,當通過JMX公開時,參數(shù)被映射到MBean操作的參數(shù),默認情況下需要參數(shù),可以使用@org.springframework.lang.Nullable對它們進行注解,從而使它們成為可選的。

允許將輸入映射到操作方法的參數(shù),實現(xiàn)端點的Java代碼應(yīng)該用-parameters編譯,并且實現(xiàn)端點的Kotlin代碼應(yīng)該用-java-parameters編譯,如果你使用Spring Boot的Gradle插件,或者使用Maven和spring-boot-starter-parent,這將自動發(fā)生。

輸入類型轉(zhuǎn)換

如果需要,傳遞給端點操作方法的參數(shù)將自動轉(zhuǎn)換為所需的類型,在調(diào)用操作方法之前,使用ApplicationConversionService實例將通過JMX或HTTP請求接收的輸入轉(zhuǎn)換為所需的類型。

50.8.2 自定義Web端點

@Endpoint、@WebEndpoint@WebEndpointExtension的操作通過使用Jersey、Spring MVC或Spring WebFlux通過HTTP自動公開。

Web端點請求謂詞

在web公開的端點上,每個操作都會自動生成一個請求謂詞。

路徑

謂詞的路徑由端點的ID和web公開端點的基本路徑?jīng)Q定,默認的基本路徑是/actuator,例如,具有ID sessions的端點將在謂詞中使用/actuator/sessions作為其路徑。

通過使用@Selector注解操作方法的一個或多個參數(shù),可以進一步定制路徑,這樣的參數(shù)作為路徑變量添加到路徑謂詞,當調(diào)用端點操作時,將變量的值傳遞給操作方法。

HTTP方法

謂詞的HTTP方法由操作類型決定,如下表所示:

@ReadOperation => GET

@WriteOperation => POST

@DeleteOperation => DELETE

消費

對于使用請求體的@WriteOperation (HTTP POST),謂詞的消費子句是application/vnd.spring-boot.actuator.v2+json, application/json,對于所有其他操作,消費子句為空。

生產(chǎn)

謂詞的生產(chǎn)子句可以由@DeleteOperation、@ReadOperation@WriteOperation注解的produces屬性確定,屬性是可選的,如果不使用,則自動確定“生成”子句。

如果操作方法返回voidVoid,則生成子句為空,如果操作方法返回一個org.springframework.core.io.Resource,生成子句是application/octet-stream。對于所有其他操作,生成子句是application/vnd.spring-boot.actuator.v2+json, application/json

Web端點響應(yīng)狀態(tài)

端點操作的默認響應(yīng)狀態(tài)取決于操作類型(讀、寫或刪除)以及操作返回的內(nèi)容(如果有的話)。

@ReadOperation返回一個值,響應(yīng)狀態(tài)為200 (OK),如果不返回值,響應(yīng)狀態(tài)將為404(Not Found)。

如果@WriteOperation@DeleteOperation返回一個值,則響應(yīng)狀態(tài)為200 (OK),如果不返回值,響應(yīng)狀態(tài)將為204(No Content)。

如果沒有必需的參數(shù)調(diào)用操作,或者參數(shù)不能轉(zhuǎn)換為所需的類型,則不會調(diào)用操作方法,響應(yīng)狀態(tài)將為400(Bad Request)。

Web端點范圍請求

HTTP范圍請求可以用于請求HTTP資源的一部分,當使用Spring MVC或Spring Web Flux時,操作將返回一個自動支持范圍請求的org.springframework.core.io.Resource

使用Jersey時不支持范圍請求
Web端點安全

web端點或特定于web的端點擴展上的操作可以接收當前的java.security.Principalorg.springframework.boot.actuate.endpoint.SecurityContext作為一個方法參數(shù)。前者通常與@Nullable一起使用,用于為經(jīng)過身份驗證的用戶和未經(jīng)身份驗證的用戶提供不同的行為,后者通常用于使用其isUserInRole(String)方法執(zhí)行授權(quán)檢查。

50.8.3 Servlet端點

Servlet可以通過實現(xiàn)一個帶有@ServletEndpoint注解的類來作為端點公開,這個類也實現(xiàn)了Supplier。Servlet端點提供了與Servlet容器更深層次的集成,但暴露了可移植性,它們用于將現(xiàn)有的Servlet公開為端點。對于新的端點,應(yīng)該盡可能使用@Endpoint@WebEndpoint注解。

50.8.4 Controller端點

可以使用@ControllerEndpoint@RestControllerEndpoint實現(xiàn)僅由Spring MVC或Spring WebFlux公開的端點,方法使用Spring MVC和Spring WebFlux(如@RequestMapping@GetMapping)的標準注解進行映射,使用端點的ID作為路徑的前綴。Controller端點提供了與Spring web框架的更深入的集成,但卻犧牲了可移植性,盡可能使用@Endpoint和@WebEndpoint注解。

50.9 健康信息

你可以使用健康信息檢查正在運行的應(yīng)用程序的狀態(tài),當生產(chǎn)系統(tǒng)崩潰時,監(jiān)控軟件通常會用它來通知某人,health端點公開的信息取決于management.endpoint.health.show-details屬性,可以使用以下值之一配置:

never

不顯示細節(jié)

when-authorized

詳細信息只顯示給授權(quán)用戶,可以使用management.endpoint.health.roles配置授權(quán)角色

always

詳細信息顯示給所有用戶

默認值是never,當用戶處于端點的一個或多個角色中時,就被認為是經(jīng)過授權(quán)的,如果端點沒有配置角色(默認),則認為所有經(jīng)過身份驗證的用戶都是經(jīng)過授權(quán)的,可以使用management.endpoint.health.roles屬性。

如果你已經(jīng)保護了你的應(yīng)用程序并且希望使用always,你的安全配置必須允許對經(jīng)過身份驗證的用戶和未經(jīng)身份驗證的用戶訪問健康端點。

健康信息是從你的ApplicationContext中定義的所有HealthIndicator bean中收集的,Spring Boot包括許多自動配置的HealthIndicators,并且你也可以自己寫。默認情況下,最終的系統(tǒng)狀態(tài)由HealthAggregator派生,它根據(jù)有序的狀態(tài)列表從每個HealthIndicator排序狀態(tài)。排序列表中的第一個狀態(tài)被用作總體健康狀態(tài),如果沒有HealthAggregator所知道的HealthIndicator狀態(tài)返回,則使用UNKNOWN狀態(tài)。

50.9.1 自動配置HealthIndicators

以下的HealthIndicators在適當?shù)臅r候在Spring Boot中自動配置:

CassandraHealthIndicator

檢查Cassandra數(shù)據(jù)庫是否已啟動

DiskSpaceHealthIndicator

檢查低磁盤空間

DataSourceHealthIndicator

檢查能否獲得到DataSource的連接

ElasticsearchHealthIndicator

檢查Elasticsearch集群是否已啟動

InfluxDbHealthIndicator

檢查InfluxDB服務(wù)是否已啟動

JmsHealthIndicator

檢查JMS代理是否已啟動

MailHealthIndicator

檢查郵件服務(wù)是否已啟動

MongoHealthIndicator

檢查Mongo數(shù)據(jù)庫是否已啟動

Neo4jHealthIndicator

檢查Neo4j服務(wù)是否已經(jīng)啟動

RabbitHealthIndicator

檢查Rabbit服務(wù)是否已經(jīng)啟動

RedisHealthIndicator

檢查Redis服務(wù)是否已啟動

SolrHealthIndicator

檢查Solr服務(wù)是否已啟動

你可以通過設(shè)置management.health.defaults.enabled屬性來禁用它們所有。
50.9.2 編寫自定義HealthIndicators

要提供自定義的健康信息,你可以注冊實現(xiàn)HealthIndicator接口的Spring bean,你需要提供health()方法的實現(xiàn)并返回Health響應(yīng)。Health響應(yīng)應(yīng)該包含一個狀態(tài),可以選擇包含要顯示的其他細節(jié),下面的代碼顯示了一個示例HealthIndicator實現(xiàn):

import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;

@Component
public class MyHealthIndicator implements HealthIndicator {

    @Override
    public Health health() {
        int errorCode = check(); // perform some specific health check
        if (errorCode != 0) {
            return Health.down().withDetail("Error Code", errorCode).build();
        }
        return Health.up().build();
    }

}
給定HealthIndicator的標識符是沒有HealthIndicator后綴的bean的名稱(如果存在的話),在前面的示例中,健康信息可以在名為my的條目中獲得。

除了Spring Boot的預(yù)定義Status類型之外,Health還可以返回表示新系統(tǒng)狀態(tài)的自定義Status,在這種情況下,還需要提供HealthAggregator接口的自定義實現(xiàn),或者,默認實現(xiàn)是使用management.health.status.order配置屬性。

例如,假設(shè)在你的一個HealthIndicator實現(xiàn)中使用了一個帶有代碼FATAL的新Status,要配置嚴重性順序,請在應(yīng)用程序?qū)傩灾刑砑右韵聦傩?

management.health.status.order=FATAL, DOWN, OUT_OF_SERVICE, UNKNOWN, UP

響應(yīng)中的HTTP狀態(tài)代碼反映總體健康狀態(tài)(例如,UP映射到200,而OUT_OF_SERVICEDOWN映射到503),如果你通過HTTP訪問健康端點,你可能還想注冊自定義狀態(tài)映射,例如,以下屬性將FATAL映射到503(service unavailable):

management.health.status.http-mapping.FATAL=503
如果你需要更多的控制,你可以定義自己的HealthStatusHttpMapper bean。

下表顯示了內(nèi)建狀態(tài)的默認狀態(tài)映射:

DOWN

SERVICE_UNAVAILABLE (503)

OUT_OF_SERVICE

SERVICE_UNAVAILABLE (503)

UP

默認情況下沒有映射,所以http狀態(tài)是200

UNKNOWN

默認情況下沒有映射,所以http狀態(tài)是200

50.9.3 Reactive健康指標 上一篇:啟用生產(chǎn)就緒特性 下一篇:通過HTTP監(jiān)控和管理

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/71225.html

相關(guān)文章

  • Spring Boot 參考指南(通過JMX監(jiān)控和管理)

    摘要:通過監(jiān)控和管理管理擴展提供了一種監(jiān)視和管理應(yīng)用程序的標準機制,默認情況下,將管理端點公開為域中的。自定義的名字的名稱通常是由端點的生成的,例如,端點公開為。 52. 通過JMX監(jiān)控和管理 Java管理擴展(JMX)提供了一種監(jiān)視和管理應(yīng)用程序的標準機制,默認情況下,Spring Boot將管理端點公開為org.springframework.boot域中的JMX mbean。 52.1...

    wdzgege 評論0 收藏0
  • Spring Boot 參考指南(通過HTTP監(jiān)控和管理)

    摘要:通過監(jiān)控和管理如果你正在開發(fā)一個應(yīng)用程序,會自動配置通過公開的所有已啟用的端點,默認約定是使用帶有前綴的端點作為路徑,例如,公開為。 51. 通過HTTP監(jiān)控和管理 如果你正在開發(fā)一個web應(yīng)用程序,Spring Boot Actuator會自動配置通過HTTP公開的所有已啟用的端點,默認約定是使用帶有/actuator前綴的端點id作為URL路徑,例如,health公開為/actua...

    jayzou 評論0 收藏0
  • Spring Boot 參考指南(目錄)

    摘要:參考指南使你可以輕松地創(chuàng)建可運行的獨立的生產(chǎn)級的基于的應(yīng)用程序,我們對平臺和第三方庫有自己的看法,這樣你就可以以最低限度工作開始了,大多數(shù)應(yīng)用程序都需要很少的配置。文檔本節(jié)簡要概述了參考文檔,它充當文檔其余部分的映射。 Spring Boot 參考指南 Spring Boot使你可以輕松地創(chuàng)建可運行的獨立的、生產(chǎn)級的基于Spring的應(yīng)用程序,我們對Spring平臺和第三方庫有自己的看...

    awesome23 評論0 收藏0
  • Spring Boot 參考指南(安全)

    摘要:用于發(fā)布身份驗證事件的。導(dǎo)入用于安全,配置身份驗證,這在非應(yīng)用程序中也是相關(guān)的。安全出于安全考慮,除和之外的所有默認禁用,屬性可用于啟用。有關(guān)保護的其他信息可以在參考指南中找到。 28. 安全 如果在類路徑上有Spring Security,那么web應(yīng)用程序默認是安全的,Spring Boot依賴Spring Security的內(nèi)容協(xié)商策略來決定是使用httpBasic還是formL...

    XanaHopper 評論0 收藏0
  • Spring Boot 參考指南(消息傳遞)

    摘要:還自動配置發(fā)送和接收消息所需的基礎(chǔ)設(shè)施。支持是一個輕量級的可靠的可伸縮的可移植的消息代理,基于協(xié)議,使用通過協(xié)議進行通信。 32. 消息傳遞 Spring框架為與消息傳遞系統(tǒng)集成提供了廣泛的支持,從使用JmsTemplate簡化的JMS API到使用完整的基礎(chǔ)設(shè)施異步接收消息,Spring AMQP為高級消息隊列協(xié)議提供了類似的特性集。Spring Boot還為RabbitTempla...

    Doyle 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<