Skip to content

Commit 795e7ba

Browse files
committed
Task 28 : Add Spring Open Api with its test and Revise README.md
1 parent dbc575c commit 795e7ba

File tree

6 files changed

+127
-0
lines changed

6 files changed

+127
-0
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@
140140
- Docker Compose
141141
- CI/CD (Github Actions)
142142
- Postman
143+
- Spring Boot Open Api
143144

144145

145146
### Postman
@@ -148,6 +149,11 @@
148149
Import postman collection under postman_collection folder
149150
```
150151

152+
### Open Api
153+
154+
```
155+
http://localhost:1225/swagger-ui/index.html
156+
```
151157

152158
### Prerequisites
153159

pom.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
<jsonwebtoken.version>0.12.3</jsonwebtoken.version>
3333
<mapstruct.version>1.5.5.Final</mapstruct.version>
3434
<lombok-mapstruct-binding.version>0.2.0</lombok-mapstruct-binding.version>
35+
<openapi.version>2.1.0</openapi.version>
36+
<springdoc-openapi.version>2.1.0</springdoc-openapi.version>
3537
</properties>
3638
<dependencies>
3739

@@ -160,6 +162,18 @@
160162
<scope>test</scope>
161163
</dependency>
162164

165+
<dependency>
166+
<groupId>org.springdoc</groupId>
167+
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
168+
<version>${openapi.version}</version>
169+
</dependency>
170+
171+
<dependency>
172+
<groupId>org.springdoc</groupId>
173+
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
174+
<version>${springdoc-openapi.version}</version>
175+
</dependency>
176+
163177
</dependencies>
164178

165179
<build>

src/main/java/com/security/rolepermissionexample/auth/config/SecurityConfig.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,12 @@ public SecurityFilterChain filterChain(
6565
.csrf(AbstractHttpConfigurer::disable)
6666
.authorizeHttpRequests(customizer -> customizer
6767
.requestMatchers(HttpMethod.POST, "/api/v1/authentication/**").permitAll()
68+
.requestMatchers(
69+
"/swagger-ui/**",
70+
"/swagger-ui.html",
71+
"/v2/api-docs/**",
72+
"/v3/api-docs/**"
73+
).permitAll()
6874
.anyRequest().authenticated()
6975
)
7076
.sessionManagement(customizer -> customizer.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.security.rolepermissionexample.common.config;
2+
3+
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
4+
import io.swagger.v3.oas.annotations.enums.SecuritySchemeIn;
5+
import io.swagger.v3.oas.annotations.enums.SecuritySchemeType;
6+
import io.swagger.v3.oas.annotations.info.Contact;
7+
import io.swagger.v3.oas.annotations.info.Info;
8+
import io.swagger.v3.oas.annotations.security.SecurityScheme;
9+
10+
/**
11+
* Configuration class named {@link OpenApiConfig} for OpenAPI documentation.
12+
*/
13+
@OpenAPIDefinition(
14+
info = @Info(
15+
contact = @Contact(
16+
name = "Sercan Noyan Germiyanoğlu",
17+
url = "https://github.com/Rapter1990/parkinglot/"
18+
),
19+
description = "Case Study - Role Permission Through Spring Security in Spring Boot" +
20+
"(Spring Boot, Spring Security , Mysql, JUnit, Integration Test, Docker, Test Container, Github Actions, Postman) ",
21+
title = "rolepermissionexample",
22+
version = "1.0.0"
23+
)
24+
)
25+
@SecurityScheme(
26+
name = "bearerAuth",
27+
description = "JWT Token",
28+
scheme = "bearer",
29+
type = SecuritySchemeType.HTTP,
30+
bearerFormat = "JWT",
31+
in = SecuritySchemeIn.HEADER
32+
)
33+
public class OpenApiConfig {
34+
35+
}

src/main/resources/application.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,10 @@ spring:
2323
sql:
2424
init:
2525
mode: always
26+
27+
28+
# SWAGGER
29+
springdoc:
30+
api-docs:
31+
enabled: true
32+
show-actuator: true
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.security.rolepermissionexample.common.config;
2+
3+
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
4+
import io.swagger.v3.oas.annotations.enums.SecuritySchemeIn;
5+
import io.swagger.v3.oas.annotations.enums.SecuritySchemeType;
6+
import io.swagger.v3.oas.annotations.info.Contact;
7+
import io.swagger.v3.oas.annotations.info.Info;
8+
import io.swagger.v3.oas.annotations.security.SecurityScheme;
9+
import org.junit.jupiter.api.Test;
10+
11+
import static org.junit.jupiter.api.Assertions.assertEquals;
12+
13+
class OpenApiConfigTest {
14+
15+
@Test
16+
void openApiInfo() {
17+
18+
// Given
19+
OpenAPIDefinition openAPIDefinition = OpenApiConfig.class.getAnnotation(OpenAPIDefinition.class);
20+
21+
// Then
22+
assertEquals("1.0.0", openAPIDefinition.info().version());
23+
assertEquals("rolepermissionexample", openAPIDefinition.info().title());
24+
assertEquals("Case Study - Role Permission Through Spring Security in Spring Boot" +
25+
"(Spring Boot, Spring Security , Mysql, JUnit, Integration Test, Docker, Test Container, Github Actions, Postman) ",
26+
openAPIDefinition.info().description());
27+
28+
}
29+
30+
@Test
31+
void securityScheme() {
32+
33+
// Given
34+
SecurityScheme securityScheme = OpenApiConfig.class.getAnnotation(SecurityScheme.class);
35+
36+
// Then
37+
assertEquals("bearerAuth", securityScheme.name());
38+
assertEquals("JWT Token", securityScheme.description());
39+
assertEquals("bearer", securityScheme.scheme());
40+
assertEquals(SecuritySchemeType.HTTP, securityScheme.type());
41+
assertEquals("JWT", securityScheme.bearerFormat());
42+
assertEquals(SecuritySchemeIn.HEADER, securityScheme.in());
43+
44+
}
45+
46+
@Test
47+
void contactInfo() {
48+
49+
// Given
50+
Info info = OpenApiConfig.class.getAnnotation(OpenAPIDefinition.class).info();
51+
Contact contact = info.contact();
52+
53+
// Then
54+
assertEquals("Sercan Noyan Germiyanoğlu", contact.name());
55+
assertEquals("https://github.com/Rapter1990/parkinglot/", contact.url());
56+
57+
}
58+
59+
}

0 commit comments

Comments
 (0)