我想防止对我的 spring boot 2 web 应用程序的 DDOS 攻击,我遇到了框架bucket4j( bucket4j-github )。我的应用程序将在 heroku 上运行,他们建议这样做(Heroku-Link)
到现在为止还挺好。我现在正在尝试实施bucket4j,我希望在那之后,如果我F5非常快速和频繁地按下,就会发生一些事情,会发生错误或类似的事情。但是它的行为就像没有bucket4j框架一样,请求已全部得到答复。
我的目标是限制来自 ip 的速率。目前我只是从本地主机尝试过。
到目前为止我所拥有的:
pom.xml
<dependency>
<groupId>com.giffing.bucket4j.spring.boot.starter</groupId>
<artifactId>bucket4j-spring-boot-starter</artifactId>
<version>0.1.15</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
<dependency><!-- Somehow I needed that since bucket4j-->
<groupId>javax.interceptor</groupId>
<artifactId>javax.interceptor-api</artifactId>
<version>1.2.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
应用程序属性
# CACHE
spring.cache.jcache.config=classpath:ehcache.xml
# RATE LIMIT
bucket4j.enabled=true
bucket4j.filters[0].cache-name=buckets
bucket4j.filters[0].filter-method=servlet
bucket4j.filters[0].url=/*
bucket4j.filters[0].rate-limits[0].bandwidths[0].capacity=10
bucket4j.filters[0].rate-limits[0].bandwidths[0].time=1
bucket4j.filters[0].rate-limits[0].bandwidths[0].unit=minutes
bucket4j.filters[0].rate-limits[0].expression=getRemoteAddress()
bucket4j.filters[0].rate-limits[0].bandwidths[0].fixed-refill-interval=0
bucket4j.filters[0].rate-limits[0].bandwidths[0].fixed-refill-interval-unit=minutes
Run Code Online (Sandbox Code Playgroud)
缓存文件
<config ... >
<cache alias="buckets">
<expiry><ttl unit="seconds">3600</ttl></expiry>
<heap unit="entries">1000000</heap>
</cache> …Run Code Online (Sandbox Code Playgroud) 我已经有一个带有apache tile和thymeleaf的客户端模块,效果很好。我想将其转换为spring-boot,并希望逐步进行,但是我真的坚持使用它。我不想改变太多,当有人可以告诉我,我应该首先做什么并使其运行时,我会喜欢的。我已经尝试过在javaConfig中编写servlet,但是我也陷入了困境。也许有人可以帮我。如果需要更多信息,请随时询问。
另一个问题是,我需要从xml更改为javaconfig吗?我更喜欢最简单的方法。但是,一旦我将spring-starter依赖项添加到pom中,应用程序就不再起作用。

=======
POM:
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>at.compax.bbsng</groupId>
<artifactId>bbsng-client</artifactId>
<version>0.1.0-SNAPSHOT</version>
</parent>
<artifactId>bbsng-client-mvc</artifactId>
<name>bbsng-client-mvc</name>
<packaging>war</packaging>
<properties>
<org.apache.tiles-version>2.2.2</org.apache.tiles-version>
<org.thymeleaf-version>2.0.16</org.thymeleaf-version>
<slf4j-version>1.7.5</slf4j-version>
<jackson.version>1.9.10</jackson.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Apache Tiles -->
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-template</artifactId>
<version>${org.apache.tiles-version}</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-servlet</artifactId>
<version>${org.apache.tiles-version}</version>
</dependency>
<!-- ThyMeLeaf ... -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>${org.thymeleaf-version}</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring3</artifactId>
<version>${org.thymeleaf-version}</version>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-tiles2</artifactId>
<version>2.0.0</version>
</dependency>
<!-- Jackson JSON Mapper -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>${jackson.version}</version> …Run Code Online (Sandbox Code Playgroud) spring-mvc apache-tiles thymeleaf spring-boot spring-java-config
我想使用Traverson的Spring-Hateoas提供的休息服务,但是遇到以下问题,我在网络上找不到任何东西。我正在使用Spring-Boot 1.1.10.RELEASE。
我的客户呼叫如下所示:
...
final Traverson traverson = new Traverson(new URI("http://localhost:8080/bbsng-app-rest"), MediaTypes.HAL_JSON);
...
Run Code Online (Sandbox Code Playgroud)
我得到以下问题:
java.lang.NoClassDefFoundError: Could not initialize class org.springframework.hateoas.client.Traverson
at at.compax.bbsng.client.mvc.client.service.BerufServiceImpl.findeAlleBerufe(BerufServiceImpl.java:41)
at at.compax.bbsng.client.mvc.rest.controller.BerufController$1.call(BerufController.java:25)
at at.compax.bbsng.client.mvc.rest.controller.BerufController$1.call(BerufController.java:1)
at org.springframework.web.context.request.async.WebAsyncManager$4.run(WebAsyncManager.java:316)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)
=====
相关配置:
POM:
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.hateoas</groupId>
<artifactId>spring-hateoas</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-core</artifactId>
<version>1.1.0.RELEASE</version>
</dependency>
...
Run Code Online (Sandbox Code Playgroud)
应用类别:
@Configuration
@EnableHypermediaSupport(type = HAL)
@EnableAutoConfiguration
public class ApplicationClientMvc {
public static void main(final String[] args) {
SpringApplication.run(ApplicationClientMvc.class, …Run Code Online (Sandbox Code Playgroud) 我想在我的项目中引入 liquibase,首先我想根据我的休眠实体生成一个变更日志文件。
到目前为止我所拥有的:
应用程序属性
# HIBERNATE
# Write out schema into sql script
spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=target/schema-h2.sql
spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
# DATABASE
spring.datasource.platform=h2
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true
# LIQUIBASE
spring.liquibase.enabled=true
spring.liquibase.url=jdbc:h2:mem:testdb
spring.liquibase.user=sa
spring.liquibase.password=
spring.liquibase.changeLog=classpath:/db/h2/liquibase-changelog-master.xml
Run Code Online (Sandbox Code Playgroud)
pom.xml
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>${liquibase.version}</version>
</dependency>
...
<plugins>
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>${liquibase.version}</version>
<configuration>
<changeLogFile>s/m/r/db/h2/liquibase-changelog-master.xml</changeLogFile>
<diffChangeLogFile> s/m/r/db/h2/changelog/${timestamp}_changelog.xml</diffChangeLogFile>
<outputChangeLogFile> s/m/r/db/h2/changelog/myaddon.db.changelog.xml</outputChangeLogFile>
<driver>org.h2.Driver</driver>
<url>jdbc:h2:mem:testdb</url>
<username>sa</username>
<password></password>
<referenceUrl>hibernate:spring:ch.hemisoft.immo.domain?hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy</referenceUrl>
<verbose>true</verbose>
<logging>trace</logging>
</configuration>
<dependencies>
<dependency>
<groupId>org.liquibase.ext</groupId>
<artifactId>liquibase-hibernate5</artifactId>
<version>${liquibase-hibernate5.version}</version>
</dependency>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>${liquibase.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId> …Run Code Online (Sandbox Code Playgroud) 我目前正在试验 liquibase。我的更改日志文件是通过liquibase-maven-plugin基于我的休眠实体类生成的。到目前为止它有效,但它映射java.time.LocalDate到BINARY(255). 是否可以教 liquibase 使用DATE,还是需要手动完成?
我在用
spring-boot ×3
liquibase ×2
apache-tiles ×1
binary ×1
changelog ×1
client ×1
ddos ×1
hal-json ×1
java ×1
java-8 ×1
jpa ×1
localdate ×1
resttemplate ×1
spring-mvc ×1
thymeleaf ×1