Add session-jdbc sample

Closes gh-27
This commit is contained in:
Marcus Da Coregio
2022-08-01 11:16:13 -03:00
parent dbfb6ce5c5
commit 65ec66eeb5
8 changed files with 123 additions and 0 deletions

1
session-jdbc/README.md Normal file
View File

@@ -0,0 +1 @@
Tests the session persistence and cookie customization from Spring Session together with Spring Session JDBC and Spring Web.

21
session-jdbc/build.gradle Normal file
View File

@@ -0,0 +1,21 @@
plugins {
id 'java'
id 'org.springframework.boot'
id 'org.springframework.aot.smoke-test'
id 'org.graalvm.buildtools.native'
}
dependencies {
implementation(platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES))
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.h2database:h2")
implementation("org.springframework.session:spring-session-jdbc:3.0.0-SNAPSHOT")
testImplementation("org.springframework.boot:spring-boot-starter-test")
aotTestImplementation(project(":aot-smoke-test-support"))
}
aotSmokeTest {
webApplication = true
}

View File

@@ -0,0 +1,24 @@
package com.example.session.jdbc;
import java.util.concurrent.atomic.AtomicReference;
import org.junit.jupiter.api.Test;
import org.springframework.aot.smoketest.support.junit.AotSmokeTest;
import org.springframework.test.web.reactive.server.WebTestClient;
@AotSmokeTest
public class SessionJdbcApplicationTests {
@Test
void shouldIncreaseCounter(WebTestClient client) {
AtomicReference<String> sessionId = new AtomicReference<>();
client.get().uri("/counter").exchange().expectCookie().value("SESSIONCOOKIE", sessionId::set).expectBody()
.jsonPath("$.counter").isEqualTo(1);
client.get().uri("/counter").cookie("SESSIONCOOKIE", sessionId.get()).exchange().expectBody()
.jsonPath("$.counter").isEqualTo(2);
client.get().uri("/counter").cookie("SESSIONCOOKIE", sessionId.get()).exchange().expectBody()
.jsonPath("$.counter").isEqualTo(3);
}
}

View File

@@ -0,0 +1,28 @@
package com.example.session.jdbc;
import java.util.Map;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/counter", produces = MediaType.APPLICATION_JSON_VALUE)
public class CounterController {
@GetMapping
public Map<String, Integer> counter(HttpServletRequest request) {
HttpSession session = request.getSession();
if (session.getAttribute("counter") == null) {
session.setAttribute("counter", 1);
}
int counter = (int) session.getAttribute("counter");
session.setAttribute("counter", counter + 1);
return Map.of("counter", counter);
}
}

View File

@@ -0,0 +1,20 @@
package com.example.session.jdbc;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.web.http.CookieSerializer;
import org.springframework.session.web.http.DefaultCookieSerializer;
@Configuration
public class SessionConfig {
@Bean
public CookieSerializer cookieSerializer() {
DefaultCookieSerializer serializer = new DefaultCookieSerializer();
serializer.setCookieName("SESSIONCOOKIE");
serializer.setCookiePath("/");
serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
return serializer;
}
}

View File

@@ -0,0 +1,13 @@
package com.example.session.jdbc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SessionJdbcApplication {
public static void main(String[] args) {
SpringApplication.run(SessionJdbcApplication.class, args);
}
}

View File

@@ -0,0 +1,15 @@
package com.example.session.jdbc;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class SessionJdbcApplicationTests {
@Test
void contextLoads() {
}
}

View File

@@ -60,6 +60,7 @@ include "security-method"
include "security-thymeleaf"
include "security-webflux"
include "security-webmvc"
include "session-jdbc"
include "session-redis-webflux"
include "spring-amqp-rabbit"
include "spring-kafka"