Use JdbcTemplate

Issue gh-2827
This commit is contained in:
Marcus Hert Da Coregio
2024-03-01 15:58:20 -03:00
parent c2a982c4a7
commit 0f91cc3376

View File

@@ -1,13 +1,9 @@
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;
@@ -15,7 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Import;
import org.springframework.jdbc.core.simple.JdbcClient;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.jackson2.SecurityJackson2Modules;
import org.springframework.test.web.servlet.MockMvc;
@@ -38,15 +34,15 @@ public class JdbcJsonAttributeTests {
ObjectMapper objectMapperWithModules;
@Autowired
JdbcClient jdbcClient;
JdbcTemplate jdbcClient;
@BeforeEach
void setup() {
ObjectMapper copy = this.objectMapper.copy();
copy.registerModules(SecurityJackson2Modules.getModules(getClass().getClassLoader()));
this.objectMapperWithModules = copy;
this.jdbcClient.sql("DELETE FROM spring_session_attributes").update();
this.jdbcClient.sql("DELETE FROM spring_session").update();
this.jdbcClient.execute("DELETE FROM spring_session_attributes");
this.jdbcClient.execute("DELETE FROM spring_session");
}
@Test
@@ -57,12 +53,12 @@ public class JdbcJsonAttributeTests {
.getResponse()
.getCookie("SESSION");
String sessionId = new String(Base64.getDecoder().decode(sessionCookie.getValue()));
Object attributeBytes = this.jdbcClient.sql("""
Object attributeBytes = this.jdbcClient.queryForObject("""
SELECT attribute_bytes::text FROM spring_session_attributes
INNER JOIN spring_session s ON s.primary_id = session_primary_id
WHERE attribute_name = 'SPRING_SECURITY_CONTEXT'
AND s.session_id = :id
""").param("id", sessionId).query().singleValue();
AND s.session_id = ?
""", Object.class, sessionId);
SecurityContext securityContext = this.objectMapperWithModules.readValue((String) attributeBytes,
SecurityContext.class);
assertThat(securityContext).isNotNull();
@@ -72,10 +68,10 @@ public class JdbcJsonAttributeTests {
@Test
void loginWhenQueryUsingJsonbOperatorThenReturns() throws Exception {
this.mvc.perform(formLogin().user("user").password("password")).andExpect(authenticated());
Object attributeBytes = this.jdbcClient.sql("""
Object attributeBytes = this.jdbcClient.queryForObject("""
SELECT attribute_bytes::text FROM spring_session_attributes
WHERE attribute_bytes -> 'authentication' -> 'principal' ->> 'username' = 'user'
""").query().singleValue();
""", Object.class);
SecurityContext securityContext = this.objectMapperWithModules.readValue((String) attributeBytes,
SecurityContext.class);
assertThat(securityContext).isNotNull();