From d4b3f06880c5e1f6629605b32f9ca17d7906e42f Mon Sep 17 00:00:00 2001 From: TheWhiteDog9487 <60037547+TheWhiteDog9487@users.noreply.github.com> Date: Sun, 21 Sep 2025 14:56:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E8=AE=BF=E9=97=AE=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=86=99=E5=85=A5SQLite=E6=95=B0=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- build.gradle.kts | 4 +-- .../Configuration/OpenAPIConfiguration.java | 2 +- .../Controller/Filter/LogClientInfo.java | 25 ++++++++++++++ .../WebAPI/Data/Entity/AccessLog.java | 34 +++++++++++++++++++ .../Data/Repository/AccessLogRepository.java | 8 +++++ src/main/resources/application.yml | 16 +++++++++ 7 files changed, 88 insertions(+), 4 deletions(-) create mode 100644 src/main/java/xyz/thewhitedog9487/WebAPI/Data/Entity/AccessLog.java create mode 100644 src/main/java/xyz/thewhitedog9487/WebAPI/Data/Repository/AccessLogRepository.java diff --git a/.gitignore b/.gitignore index 8bd9e9c..6f0910d 100644 --- a/.gitignore +++ b/.gitignore @@ -36,4 +36,5 @@ out/ ### VS Code ### .vscode/ -API密钥.txt \ No newline at end of file +API密钥.txt +SQLiteDataBase.db \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index ec98c84..1af2554 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ plugins { } group = "xyz.thewhitedog9487" -version = "0.5.3" +version = "0.6.0" java { toolchain { @@ -34,7 +34,7 @@ dependencies { implementation("org.hibernate.orm:hibernate-community-dialects") implementation("com.discord4j:discord4j-core:3.2.8") implementation("com.fasterxml.jackson.core:jackson-core:2.19.2") - implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.9") + implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.13") implementation("org.springdoc:springdoc-openapi-starter-webmvc-api:2.8.9") implementation("org.springframework.boot:spring-boot-starter-actuator") compileOnly("org.projectlombok:lombok") diff --git a/src/main/java/xyz/thewhitedog9487/WebAPI/Configuration/OpenAPIConfiguration.java b/src/main/java/xyz/thewhitedog9487/WebAPI/Configuration/OpenAPIConfiguration.java index 09a588e..b8be318 100644 --- a/src/main/java/xyz/thewhitedog9487/WebAPI/Configuration/OpenAPIConfiguration.java +++ b/src/main/java/xyz/thewhitedog9487/WebAPI/Configuration/OpenAPIConfiguration.java @@ -23,7 +23,7 @@ class OpenAPIConfiguration { .contact(new Contact() .name("TheWhiteDog9487") .url("https://www.github.com/TheWhiteDog9487/WebAPI")) - .version("0.5.3") + .version("0.6.0") .license(new License() .name("WTFPL") .url("https://spdx.org/licenses/WTFPL")) ) diff --git a/src/main/java/xyz/thewhitedog9487/WebAPI/Controller/Filter/LogClientInfo.java b/src/main/java/xyz/thewhitedog9487/WebAPI/Controller/Filter/LogClientInfo.java index d9753b1..8df1e82 100644 --- a/src/main/java/xyz/thewhitedog9487/WebAPI/Controller/Filter/LogClientInfo.java +++ b/src/main/java/xyz/thewhitedog9487/WebAPI/Controller/Filter/LogClientInfo.java @@ -5,15 +5,21 @@ import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; +import xyz.thewhitedog9487.WebAPI.Data.Entity.AccessLog; +import xyz.thewhitedog9487.WebAPI.Data.Repository.AccessLogRepository; import java.io.IOException; +import java.time.Instant; +import java.util.Collections; import java.util.Locale; @Slf4j @Component public class LogClientInfo extends OncePerRequestFilter { + @Autowired AccessLogRepository AccessLogRepository; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { @@ -41,4 +47,23 @@ public class LogClientInfo extends OncePerRequestFilter { log.info("请求未携带User-Agent头部,无法获取客户端软件信息。"); } else{ log.info("请求的User-Agent:{}", UserAgent); } + var Log = new AccessLog( + null, + request.getRequestId(), + request.getHeader("CF-Connecting-IP".toLowerCase() ), + request.getHeader("X-Forwarded-For".toLowerCase() ), + request.getRemoteAddr(), + request.getHeader("CF-IPCountry".toLowerCase() ), + ( request.getHeader("CF-IPCountry".toLowerCase() ) == null ) ? null : Locale.of(Locale.PRC.getLanguage(), request.getHeader("CF-IPCountry".toLowerCase() ), Locale.SIMPLIFIED_CHINESE.getVariant()).getISO3Country(), + UserAgent, + request.getMethod(), + request.getRequestURL().toString(), + request.getQueryString(), + Collections.list( request.getHeaderNames() ) + .stream() + .map( name -> name + ": " + Collections.list(request.getHeaders(name)) ) + .reduce( ( a, b ) -> a + "\n" + b ) + .orElse(""), + Instant.now() ); + AccessLogRepository.save(Log); filterChain.doFilter(request, response); } } \ No newline at end of file diff --git a/src/main/java/xyz/thewhitedog9487/WebAPI/Data/Entity/AccessLog.java b/src/main/java/xyz/thewhitedog9487/WebAPI/Data/Entity/AccessLog.java new file mode 100644 index 0000000..03f1595 --- /dev/null +++ b/src/main/java/xyz/thewhitedog9487/WebAPI/Data/Entity/AccessLog.java @@ -0,0 +1,34 @@ +package xyz.thewhitedog9487.WebAPI.Data.Entity; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.time.Instant; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table +public class AccessLog{ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(nullable = false) + Long ID; + + String RequestID; + @Column(name = "\"CF-Connecting-IP\"") String CF_Connecting_IP; + @Column(name = "\"X-Forwarded-For\"") String X_Forwarded_For; + String RemoteAddress; + @Column(name = "\"CF-IPCountry\"") String CF_IPCountry; + String ISO3166; + String UserAgent; + String HttpMethod; + String URL; + String QueryString; + @Column(columnDefinition = "text") String Header; + Instant Timestamp; } \ No newline at end of file diff --git a/src/main/java/xyz/thewhitedog9487/WebAPI/Data/Repository/AccessLogRepository.java b/src/main/java/xyz/thewhitedog9487/WebAPI/Data/Repository/AccessLogRepository.java new file mode 100644 index 0000000..57aa934 --- /dev/null +++ b/src/main/java/xyz/thewhitedog9487/WebAPI/Data/Repository/AccessLogRepository.java @@ -0,0 +1,8 @@ +package xyz.thewhitedog9487.WebAPI.Data.Repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import xyz.thewhitedog9487.WebAPI.Data.Entity.AccessLog; + +public interface AccessLogRepository extends JpaRepository { + +} \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index ce7f42c..b46e5f2 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -4,6 +4,22 @@ spring: threads: virtual: enabled: true + jpa: + hibernate: + naming: + physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl + ddl-auto: update + database-platform: org.hibernate.community.dialect.SQLiteDialect + show-sql: true + properties: + hibernate: + format_sql: true + datasource: + driver-class-name: org.sqlite.JDBC + username: + password: + url: jdbc:sqlite:SQLiteDataBase.db + server: port: 36987 logging: