From 61cabaaa3b6cff50995dc0f83a1cde2322089eef Mon Sep 17 00:00:00 2001 From: sshkurov Date: Thu, 3 Feb 2022 03:27:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20gradle=20=D0=B8=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE?= =?UTF-8?q?=D1=82=D0=B5=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 24 +++---- docker/Dockerfile_app | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../ApplicationConfiguration.java | 66 +------------------ .../configuration/SecurityConfiguration.java | 63 ++++++++++++++++++ .../configuration/WebSocketConfiguration.java | 27 ++++++++ 6 files changed, 106 insertions(+), 78 deletions(-) create mode 100644 src/main/java/ru/serega6531/packmate/configuration/SecurityConfiguration.java create mode 100644 src/main/java/ru/serega6531/packmate/configuration/WebSocketConfiguration.java diff --git a/build.gradle b/build.gradle index 5cb5758..ed300cd 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'org.springframework.boot' version '2.4.1' + id 'org.springframework.boot' version '2.6.3' id 'java' } @@ -27,19 +27,19 @@ dependencies { implementation "org.springframework.boot:spring-boot-starter-security" implementation "org.springframework.boot:spring-boot-starter-websocket" implementation 'org.springframework.session:spring-session-core' - compile 'com.github.jmnarloch:modelmapper-spring-boot-starter:1.1.0' - compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.10' - compile group: 'commons-io', name: 'commons-io', version: '2.7' - compile 'org.pcap4j:pcap4j-core:1.8.2' - compile 'org.pcap4j:pcap4j-packetfactory-static:1.8.2' - compile group: 'com.google.guava', name: 'guava', version: '30.1-jre' - compile group: 'org.java-websocket', name: 'Java-WebSocket', version: '1.5.1' - compile group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.68' - compile group: 'org.bouncycastle', name: 'bctls-jdk15on', version: '1.68' - compile group: 'org.modelmapper', name: 'modelmapper', version: '2.3.0' + implementation 'com.github.jmnarloch:modelmapper-spring-boot-starter:1.1.0' + implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.12.0' + implementation group: 'commons-io', name: 'commons-io', version: '2.11.0' + implementation 'org.pcap4j:pcap4j-core:1.8.2' + implementation 'org.pcap4j:pcap4j-packetfactory-static:1.8.2' + implementation group: 'com.google.guava', name: 'guava', version: '31.0.1-jre' + implementation group: 'org.java-websocket', name: 'Java-WebSocket', version: '1.5.1' + implementation group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.69' + implementation group: 'org.bouncycastle', name: 'bctls-jdk15on', version: '1.70' + implementation group: 'org.modelmapper', name: 'modelmapper', version: '2.4.5' compileOnly 'org.projectlombok:lombok' runtimeOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'org.postgresql:postgresql' annotationProcessor 'org.projectlombok:lombok' - testCompile 'org.junit.jupiter:junit-jupiter:5.6.2' + testImplementation 'org.junit.jupiter:junit-jupiter:5.8.2' } diff --git a/docker/Dockerfile_app b/docker/Dockerfile_app index 1d44a46..f7ebd65 100644 --- a/docker/Dockerfile_app +++ b/docker/Dockerfile_app @@ -12,5 +12,5 @@ RUN ./gradlew --no-daemon build -x test FROM adoptopenjdk/openjdk15:alpine-jre WORKDIR /app RUN apk --no-cache add libpcap -COPY --from=1 /tmp/compile/build/libs/packmate-*.jar app.jar +COPY --from=1 /tmp/compile/build/libs/packmate-*-SNAPSHOT.jar app.jar EXPOSE 65000:65000 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ec991f9..2e6e589 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/ru/serega6531/packmate/configuration/ApplicationConfiguration.java b/src/main/java/ru/serega6531/packmate/configuration/ApplicationConfiguration.java index 3dbf80a..f86522c 100644 --- a/src/main/java/ru/serega6531/packmate/configuration/ApplicationConfiguration.java +++ b/src/main/java/ru/serega6531/packmate/configuration/ApplicationConfiguration.java @@ -1,25 +1,14 @@ package ru.serega6531.packmate.configuration; -import lombok.extern.slf4j.Slf4j; import org.pcap4j.core.PcapNativeException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.event.EventListener; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.security.authentication.event.AuthenticationFailureBadCredentialsEvent; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.web.socket.config.annotation.EnableWebSocket; -import org.springframework.web.socket.config.annotation.WebSocketConfigurer; -import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; -import ru.serega6531.packmate.WebSocketHandler; import ru.serega6531.packmate.model.enums.CaptureMode; import ru.serega6531.packmate.pcap.FilePcapWorker; import ru.serega6531.packmate.pcap.LivePcapWorker; @@ -32,25 +21,9 @@ import ru.serega6531.packmate.service.SubscriptionService; import java.net.UnknownHostException; @Configuration -@EnableWebSecurity @EnableScheduling -@EnableWebSocket @EnableAsync -@Slf4j -public class ApplicationConfiguration extends WebSecurityConfigurerAdapter implements WebSocketConfigurer { - - @Value("${account-login}") - private String login; - - @Value("${account-password}") - private String password; - - private final WebSocketHandler webSocketHandler; - - @Autowired - public ApplicationConfiguration(WebSocketHandler webSocketHandler) { - this.webSocketHandler = webSocketHandler; - } +public class ApplicationConfiguration { @Bean(destroyMethod = "stop") @Autowired @@ -64,48 +37,13 @@ public class ApplicationConfiguration extends WebSecurityConfigurerAdapter imple return switch (captureMode) { case LIVE -> new LivePcapWorker(servicesService, streamService, localIpString, interfaceName); case FILE -> new FilePcapWorker(servicesService, streamService, subscriptionService, localIpString, filename); - default -> new NoOpPcapWorker(); + case VIEW -> new NoOpPcapWorker(); }; } - @Autowired - public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { - auth.inMemoryAuthentication() - .withUser(login) - .password(passwordEncoder().encode(password)) - .authorities("ROLE_USER"); - } - - @Override - protected void configure(HttpSecurity http) throws Exception { - http.csrf() - .disable() - .authorizeRequests() - .antMatchers("/site.webmanifest") - .permitAll() - .anyRequest().authenticated() - .and() - .httpBasic() - .and() - .headers() - .frameOptions() - .sameOrigin(); - } - @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } - @EventListener - public void authenticationFailed(AuthenticationFailureBadCredentialsEvent e) { - log.info("Login failed for user {}, password {}", - e.getAuthentication().getPrincipal(), e.getAuthentication().getCredentials()); - } - - @Override - public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { - registry.addHandler(webSocketHandler, "/api/ws") - .withSockJS(); - } } diff --git a/src/main/java/ru/serega6531/packmate/configuration/SecurityConfiguration.java b/src/main/java/ru/serega6531/packmate/configuration/SecurityConfiguration.java new file mode 100644 index 0000000..0d8a2bf --- /dev/null +++ b/src/main/java/ru/serega6531/packmate/configuration/SecurityConfiguration.java @@ -0,0 +1,63 @@ +package ru.serega6531.packmate.configuration; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.event.EventListener; +import org.springframework.security.authentication.event.AuthenticationFailureBadCredentialsEvent; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.crypto.password.PasswordEncoder; + +@Configuration +@EnableWebSecurity +@Slf4j +public class SecurityConfiguration extends WebSecurityConfigurerAdapter { + + @Value("${account-login}") + private String login; + + @Value("${account-password}") + private String password; + + private final PasswordEncoder passwordEncoder; + + @Autowired + public SecurityConfiguration(PasswordEncoder passwordEncoder) { + this.passwordEncoder = passwordEncoder; + } + + @Autowired + public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { + auth.inMemoryAuthentication() + .withUser(login) + .password(passwordEncoder.encode(password)) + .authorities("ROLE_USER"); + } + + @Override + protected void configure(HttpSecurity http) throws Exception { + http.csrf() + .disable() + .authorizeRequests() + .antMatchers("/site.webmanifest") + .permitAll() + .anyRequest().authenticated() + .and() + .httpBasic() + .and() + .headers() + .frameOptions() + .sameOrigin(); + } + + @EventListener + public void authenticationFailed(AuthenticationFailureBadCredentialsEvent e) { + log.info("Login failed for user {}, password {}", + e.getAuthentication().getPrincipal(), e.getAuthentication().getCredentials()); + } + +} diff --git a/src/main/java/ru/serega6531/packmate/configuration/WebSocketConfiguration.java b/src/main/java/ru/serega6531/packmate/configuration/WebSocketConfiguration.java new file mode 100644 index 0000000..1b494e1 --- /dev/null +++ b/src/main/java/ru/serega6531/packmate/configuration/WebSocketConfiguration.java @@ -0,0 +1,27 @@ +package ru.serega6531.packmate.configuration; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.config.annotation.EnableWebSocket; +import org.springframework.web.socket.config.annotation.WebSocketConfigurer; +import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; +import ru.serega6531.packmate.WebSocketHandler; + +@EnableWebSocket +@Configuration +public class WebSocketConfiguration implements WebSocketConfigurer { + + private final WebSocketHandler webSocketHandler; + + @Autowired + public WebSocketConfiguration(WebSocketHandler webSocketHandler) { + this.webSocketHandler = webSocketHandler; + } + + @Override + public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { + registry.addHandler(webSocketHandler, "/api/ws") + .withSockJS(); + } + +}