小编Mic*_*ner的帖子

带有 Bucket4j 的 Spring Boot 2 以防止 DDOS 攻击

我想防止对我的 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)

ddos rate-limiting spring-boot

5
推荐指数
1
解决办法
3725
查看次数

Spring-Boot + Spring-MVC + Thymeleaf + Apache Tiles

我已经有一个带有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

4
推荐指数
1
解决办法
2万
查看次数

使用Traverson的Spring-Hateoas客户

我想使用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)

client resttemplate spring-hateoas hal-json

3
推荐指数
1
解决办法
2213
查看次数

使用 Liquibase 和 JPA 实体生成变更日志

我想在我的项目中引入 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)

jpa changelog liquibase spring-boot

3
推荐指数
1
解决办法
8802
查看次数

Liquibase Diff 将 LocalTime 映射到 Binary

我目前正在试验 liquibase。我的更改日志文件是通过liquibase-maven-plugin基于我的休眠实体类生成的。到目前为止它有效,但它映射java.time.LocalDateBINARY(255). 是否可以教 liquibase 使用DATE,还是需要手动完成?

我在用

  • 弹簧启动 2.1.4
  • Liquibase 3.6.3
  • 休眠 5.3.9

java binary liquibase java-8 localdate

1
推荐指数
1
解决办法
261
查看次数