Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/main/java/com/kt/ShoppingApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@SpringBootApplication
@ConfigurationPropertiesScan
@EnableJpaAuditing
@EnableAspectJAutoProxy
public class ShoppingApplication {

public static void main(String[] args) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,13 @@
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;

@Aspect
@Component
@RequiredArgsConstructor
@Slf4j
@ConditionalOnProperty(name = "ratelimit.enabled", havingValue = "true", matchIfMissing = true)
public class RateLimitAspect {

private final RateLimitManager rateLimitManager;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,11 @@
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;

@Slf4j
@Component
@ConditionalOnProperty(name = "ratelimit.enabled", havingValue = "true", matchIfMissing = true)
public class GlobalRateLimitFilter extends OncePerRequestFilter {

private static final int MAX_REQUEST_SECONDS = 100;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@

import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;

@Component
@Slf4j
@ConditionalOnProperty(name = "ratelimit.enabled", havingValue = "true", matchIfMissing = true)
public class RateLimitKeyGenerator {

public String generateKey(KeyType keyType, HttpServletRequest request, String httpMethod, String path) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,12 @@
import io.github.bucket4j.distributed.proxy.ProxyManager;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;

@Component
@RequiredArgsConstructor
@Slf4j
@ConditionalOnProperty(name = "ratelimit.enabled", havingValue = "true", matchIfMissing = true)
public class RateLimitManager {

private final ProxyManager<String> proxyManager;
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/kt/config/RateLimitConfiguration.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,17 @@
import java.time.Duration;
import java.util.concurrent.TimeUnit;

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

import com.github.benmanes.caffeine.cache.Caffeine;

import io.github.bucket4j.caffeine.CaffeineProxyManager;
import io.github.bucket4j.distributed.proxy.ProxyManager;

@Configuration
@EnableAspectJAutoProxy
@ConditionalOnProperty(name = "ratelimit.enabled", havingValue = "true", matchIfMissing = true)
public class RateLimitConfiguration {

private static final int CACHE_MAX_SIZE = 100000;
Expand Down
17 changes: 14 additions & 3 deletions src/main/java/com/kt/config/SecurityConfiguration.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,12 @@
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;

import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;

@Configuration
@EnableWebSecurity
@EnableMethodSecurity
@RequiredArgsConstructor
public class SecurityConfiguration {

private static final String[] GET_PERMIT_ALL = {"/api/health/**", "/swagger-ui.html","/swagger-ui/**", "/v3/api-docs/**", "/actuator/**", "/payment-*.html", "/api/payments/client-key", "/*.css", "/api/chats", "/api/chats/**"};
Expand All @@ -36,6 +35,16 @@ public class SecurityConfiguration {
private final ObjectMapper objectMapper;
private final GlobalRateLimitFilter globalRateLimitFilter;

public SecurityConfiguration(
JwtTokenProvider jwtTokenProvider,
ObjectMapper objectMapper,
@Autowired(required = false) GlobalRateLimitFilter globalRateLimitFilter
) {
this.jwtTokenProvider = jwtTokenProvider;
this.objectMapper = objectMapper;
this.globalRateLimitFilter = globalRateLimitFilter;
}

@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
Expand Down Expand Up @@ -69,7 +78,9 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
.logout(logout -> logout.disable())
.csrf(AbstractHttpConfigurer::disable);

http.addFilterBefore(globalRateLimitFilter, UsernamePasswordAuthenticationFilter.class);
if (globalRateLimitFilter != null) {
http.addFilterBefore(globalRateLimitFilter, UsernamePasswordAuthenticationFilter.class);
}

http.addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider,objectMapper), UsernamePasswordAuthenticationFilter.class);

Expand Down
5 changes: 4 additions & 1 deletion src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,7 @@ slack:
log-channel: ${slack.channel}

server:
port: 8080
port: 8080

ratelimit:
enabled: true
Loading