From 6fd52ca6623c3f1a13d77ecf9c33c9ee7b4a7f0b Mon Sep 17 00:00:00 2001 From: Rob Winch <362503+rwinch@users.noreply.github.com> Date: Tue, 22 Apr 2025 11:08:42 -0500 Subject: [PATCH] Extract JdbcJsonSpecialCharsAttributeTests Signed-off-by: Rob Winch <362503+rwinch@users.noreply.github.com> --- .../src/main/resources/application.properties | 1 - .../java/sample/JdbcJsonAttributeTests.java | 24 ++++++++------- .../JdbcJsonSpecialCharsAttributeTests.java | 29 +++++++++++++++++++ 3 files changed, 43 insertions(+), 11 deletions(-) create mode 100644 spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/test/java/sample/JdbcJsonSpecialCharsAttributeTests.java diff --git a/spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/main/resources/application.properties b/spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/main/resources/application.properties index 8b21caa8..e8e848d1 100644 --- a/spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/main/resources/application.properties +++ b/spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/main/resources/application.properties @@ -1,4 +1,3 @@ -spring.security.user.name=rüdiger spring.security.user.password=password spring.session.jdbc.schema=classpath:schema.sql spring.session.jdbc.initialize-schema=always diff --git a/spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/test/java/sample/JdbcJsonAttributeTests.java b/spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/test/java/sample/JdbcJsonAttributeTests.java index 3a52aa56..25abb6a1 100644 --- a/spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/test/java/sample/JdbcJsonAttributeTests.java +++ b/spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/test/java/sample/JdbcJsonAttributeTests.java @@ -1,17 +1,14 @@ package sample; -import java.sql.Types; import java.util.Base64; -import java.util.List; -import java.util.Map; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.http.Cookie; -import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.security.SecurityProperties; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.Import; @@ -40,6 +37,13 @@ class JdbcJsonAttributeTests { @Autowired JdbcClient jdbcClient; + String username; + + @Autowired + void setSecurityProperties(SecurityProperties securityProperties) { + this.username = securityProperties.getUser().getName(); + } + @BeforeEach void setup() { ObjectMapper copy = this.objectMapper.copy(); @@ -51,7 +55,7 @@ class JdbcJsonAttributeTests { @Test void loginShouldSaveSecurityContextAsJson() throws Exception { - Cookie sessionCookie = this.mvc.perform(formLogin().user("rĂ¼diger").password("password")) + Cookie sessionCookie = this.mvc.perform(formLogin().user(this.username).password("password")) .andExpect(authenticated()) .andReturn() .getResponse() @@ -66,20 +70,20 @@ class JdbcJsonAttributeTests { SecurityContext securityContext = this.objectMapperWithModules.readValue((String) attributeBytes, SecurityContext.class); assertThat(securityContext).isNotNull(); - assertThat(securityContext.getAuthentication().getName()).isEqualTo("rĂ¼diger"); + assertThat(securityContext.getAuthentication().getName()).isEqualTo(this.username); } @Test void loginWhenQueryUsingJsonbOperatorThenReturns() throws Exception { - this.mvc.perform(formLogin().user("rĂ¼diger").password("password")).andExpect(authenticated()); + this.mvc.perform(formLogin().user(this.username).password("password")).andExpect(authenticated()); Object attributeBytes = this.jdbcClient.sql(""" SELECT attribute_bytes::text FROM spring_session_attributes - WHERE attribute_bytes -> 'authentication' -> 'principal' ->> 'username' = 'rĂ¼diger' - """).query().singleValue(); + WHERE attribute_bytes -> 'authentication' -> 'principal' ->> 'username' = '%s' + """.formatted(this.username)).query().singleValue(); SecurityContext securityContext = this.objectMapperWithModules.readValue((String) attributeBytes, SecurityContext.class); assertThat(securityContext).isNotNull(); - assertThat(securityContext.getAuthentication().getName()).isEqualTo("rĂ¼diger"); + assertThat(securityContext.getAuthentication().getName()).isEqualTo(this.username); } } diff --git a/spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/test/java/sample/JdbcJsonSpecialCharsAttributeTests.java b/spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/test/java/sample/JdbcJsonSpecialCharsAttributeTests.java new file mode 100644 index 00000000..00b1c1e7 --- /dev/null +++ b/spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/test/java/sample/JdbcJsonSpecialCharsAttributeTests.java @@ -0,0 +1,29 @@ +/* + * Copyright 2014-2022 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package sample; + +import org.springframework.test.context.TestPropertySource; + +/** + * Test that special characters in usernames work. + * + * @author Rob Winch + */ +@TestPropertySource(properties = "spring.security.user.name=rĂƒÂ¼diger") +class JdbcJsonSpecialCharsAttributeTests extends JdbcJsonAttributeTests { + +}