Skip to content

Commit

Permalink
Merge pull request #23 from Genc/develop
Browse files Browse the repository at this point in the history
Upgrading to Java 17 and Spring Boot 3.3.1 version.
  • Loading branch information
Genc authored Jul 22, 2024
2 parents 7ccc554 + 761db3e commit b0d99f4
Show file tree
Hide file tree
Showing 17 changed files with 135 additions and 103 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ jobs:

steps:
- uses: actions/checkout@v3
- name: Set up JDK 11
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '11'
java-version: '17'
distribution: 'temurin'

- name: Build with Maven
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM openjdk:11
FROM eclipse-temurin:17
WORKDIR app
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} spring-boot-boilerplate.jar
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
*Spring Boot Boilerplate* is a **starter kit**. This project is a very simple and useful.

## Technologies
- Spring Boot (v2.7.10)
- Spring Boot (v3.3.1)
- Spring Data JPA
- Spring Validation
- Spring Security + JWT Token
Expand Down
18 changes: 14 additions & 4 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
version: '3.8'

services:

db:
Expand All @@ -10,16 +8,28 @@ services:
- "5432:5432"
environment:
POSTGRES_PASSWORD: example
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5

app:
container_name: app
image: omerfarukgenc34/spring-boot-boilerplate:2.2.0
image: omerfarukgenc34/spring-boot-boilerplate:3.3.1
ports:
- "8080:8080"
environment:
- "POSTGRES_DB_SERVER_ADDRESS=db"
- "POSTGRES_DB_SERVER_PORT=5432"
- "POSTGRES_USER=postgres"
- "POSTGRES_PASSWORD=example"
healthcheck:
test: "curl --fail --silent localhost:8080/actuator/health/readiness | grep UP || exit 1"
interval: 2s
timeout: 3s
retries: 5
start_period: 2s
depends_on:
- db
db:
condition: service_healthy
19 changes: 14 additions & 5 deletions local-docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
version: '3.8'

services:

db:
Expand All @@ -10,17 +8,28 @@ services:
- "5432:5432"
environment:
POSTGRES_PASSWORD: example
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5

app:
container_name: app
build:
context: .
build: .
ports:
- "8080:8080"
environment:
- "POSTGRES_DB_SERVER_ADDRESS=db"
- "POSTGRES_DB_SERVER_PORT=5432"
- "POSTGRES_USER=postgres"
- "POSTGRES_PASSWORD=example"
healthcheck:
test: "curl --fail --silent localhost:8080/actuator/health/readiness | grep UP || exit 1"
interval: 2s
timeout: 3s
retries: 5
start_period: 2s
depends_on:
- db
db:
condition: service_healthy
36 changes: 13 additions & 23 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.10</version>
<version>3.3.1</version>
</parent>

<groupId>com.farukgenc</groupId>
<artifactId>springboot-boilerplate</artifactId>
<version>2.2.0</version>
<version>3.3.1</version>

<name>spring-boot-boilerplate</name>
<description>
Spring Boot Boilerplate is a starter kit. This project includes : Spring Boot(2.7.4), Spring Data JPA, Spring Validation, Spring Security +
JWT Token, PostgreSQL, Mapstruct, Lombok, Swagger
Spring Boot Boilerplate is a starter kit.
This project includes : Spring Boot(3.3.1), Spring Data JPA, Spring Validation, Spring Security + JWT Token, PostgreSQL, Mapstruct, Lombok, Swagger (Open API)
</description>

<developers>
Expand All @@ -28,12 +28,15 @@
</developers>

<properties>
<java.version>11</java.version>
<jwt.version>4.3.0</jwt.version>
<apache-commons.version>3.12.0</apache-commons.version>
<openapi-swagger.version>1.6.15</openapi-swagger.version>
<mapstruct.version>1.5.3.Final</mapstruct.version>

<java.version>17</java.version>
<jwt.version>4.4.0</jwt.version>

<openapi-swagger.version>2.6.0</openapi-swagger.version>

<mapstruct.version>1.5.5.Final</mapstruct.version>
<lombok-mapstruct-binding.version>0.2.0</lombok-mapstruct-binding.version>

</properties>

<dependencies>
Expand Down Expand Up @@ -99,29 +102,16 @@
<version>${lombok-mapstruct-binding.version}</version>
</dependency>


<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${apache-commons.version}</version>
</dependency>

<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>${openapi-swagger.version}</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>

</dependencies>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package com.farukgenc.boilerplate.springboot.configuration;

import com.farukgenc.boilerplate.springboot.security.jwt.JwtAuthenticationFilter;
import com.farukgenc.boilerplate.springboot.security.jwt.JwtAuthenticationEntryPoint;
import com.farukgenc.boilerplate.springboot.security.jwt.JwtAuthenticationFilter;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
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.configurers.*;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
Expand All @@ -20,9 +20,7 @@
* @author Faruk
*/
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration {

private final JwtAuthenticationFilter jwtAuthenticationFilter;
Expand All @@ -39,17 +37,24 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti

//@formatter:off

return http.cors().and().csrf().disable()
return http
.csrf(CsrfConfigurer::disable)
.cors(CorsConfigurer::disable)
.addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class)
.authorizeRequests()
.antMatchers("/register", "/login","/v3/api-docs/**", "/swagger-ui/**", "/swagger-ui.html", "/actuator/**").permitAll()
.anyRequest().authenticated().and()
.exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and().build();
.authorizeHttpRequests(request -> request.requestMatchers("/register",
"/login",
"/v3/api-docs/**",
"/swagger-ui/**",
"/swagger-ui.html",
"/actuator/**")
.permitAll()
.anyRequest()
.authenticated())
.sessionManagement(manager -> manager.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.exceptionHandling(handler -> handler.authenticationEntryPoint(unauthorizedHandler))
.build();

//@formatter:on
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import io.swagger.v3.oas.models.security.SecurityScheme;
import lombok.Getter;
import lombok.Setter;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
Expand Down Expand Up @@ -49,7 +50,7 @@ public OpenAPI openAPI() {
final Components components = new Components();

final String schemeName = "bearerAuth";
components.addSecuritySchemes(schemeName, new SecurityScheme().name(schemeName).type(HTTP).scheme("bearer").bearerFormat("JWT"));
components.addSecuritySchemes(schemeName, new SecurityScheme().name(schemeName).type(HTTP).scheme("Bearer").bearerFormat("JWT"));

final OpenAPI openAPI = new OpenAPI();
openAPI.setInfo(apiInformation);
Expand All @@ -70,7 +71,6 @@ private Info getApiInformation() {
contact.setUrl(contactUrl);
contact.setEmail(contactMail);


final Info info = new Info();
info.setTitle(appName);
info.setVersion(appVersion);
Expand All @@ -81,4 +81,14 @@ private Info getApiInformation() {
return info;
}

@Bean
GroupedOpenApi managementApi() {
return GroupedOpenApi.builder().pathsToMatch("/actuator/**").group("Management Api").build();
}

@Bean
GroupedOpenApi defaultApi() {
return GroupedOpenApi.builder().pathsToExclude("/actuator/**").group("Default Api").build();
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.farukgenc.boilerplate.springboot.controller;

import io.swagger.v3.oas.annotations.Operation;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
Expand All @@ -13,6 +14,7 @@
public class HelloController {

@GetMapping("/hello")
@Operation(tags = "Hello Service", description = "When you send token information in the header it just says Hello")
public ResponseEntity<String> sayHello() {

return ResponseEntity.ok("Hello Spring Boot Boilerplate");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,17 @@
import com.farukgenc.boilerplate.springboot.security.dto.LoginRequest;
import com.farukgenc.boilerplate.springboot.security.dto.LoginResponse;
import com.farukgenc.boilerplate.springboot.security.jwt.JwtTokenService;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
* Created on Ağustos, 2020
*
* @author Faruk
*/
@CrossOrigin
@RestController
@RequiredArgsConstructor
@RequestMapping("/login")
Expand All @@ -23,6 +22,7 @@ public class LoginController {
private final JwtTokenService jwtTokenService;

@PostMapping
@Operation(tags = "Login Service", description = "You must log in with the correct information to successfully obtain the token information.")
public ResponseEntity<LoginResponse> loginRequest(@Valid @RequestBody LoginRequest loginRequest) {

final LoginResponse loginResponse = jwtTokenService.getLoginResponse(loginRequest);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,19 @@
import com.farukgenc.boilerplate.springboot.security.dto.RegistrationRequest;
import com.farukgenc.boilerplate.springboot.security.dto.RegistrationResponse;
import com.farukgenc.boilerplate.springboot.security.service.UserService;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
* Created on Ağustos, 2020
*
* @author Faruk
*/
@CrossOrigin
@RestController
@RequiredArgsConstructor
@RequestMapping("/register")
Expand All @@ -24,6 +24,7 @@ public class RegistrationController {
private final UserService userService;

@PostMapping
@Operation(tags = "Register Service", description = "You can register to the system by sending information in the appropriate format.")
public ResponseEntity<RegistrationResponse> registrationRequest(@Valid @RequestBody RegistrationRequest registrationRequest) {

final RegistrationResponse registrationResponse = userService.registration(registrationRequest);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.farukgenc.boilerplate.springboot.model;

import jakarta.persistence.*;
import lombok.*;

import javax.persistence.*;

/**
* Created on Ağustos, 2020
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.farukgenc.boilerplate.springboot.security.dto;

import jakarta.validation.constraints.NotEmpty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.validation.constraints.NotEmpty;

/**
* Created on Ağustos, 2020
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package com.farukgenc.boilerplate.springboot.security.dto;

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotEmpty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;

/**
* Created on Ağustos, 2020
*
Expand Down
Loading

0 comments on commit b0d99f4

Please sign in to comment.