From 2809bff3b9a64874096a20b93101c4c89bcffc79 Mon Sep 17 00:00:00 2001 From: ScarletRedMan Date: Sun, 26 May 2024 20:13:38 +0700 Subject: [PATCH] added account json to http header --- .../picker/api/impl/util/RestTemplate.java | 2 +- .../picker/security/AccountHeadersFilter.java | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 server/src/main/java/ru/dragonestia/picker/security/AccountHeadersFilter.java diff --git a/client-impl/src/main/java/ru/dragonestia/picker/api/impl/util/RestTemplate.java b/client-impl/src/main/java/ru/dragonestia/picker/api/impl/util/RestTemplate.java index 3852ed3..74c7ff5 100644 --- a/client-impl/src/main/java/ru/dragonestia/picker/api/impl/util/RestTemplate.java +++ b/client-impl/src/main/java/ru/dragonestia/picker/api/impl/util/RestTemplate.java @@ -188,7 +188,7 @@ public class RestTemplate { throw new NotEnoughPermissions("Not enough permissions"); } - var accountData = json.readValue(response.header("X-Account"), Account.class); + var accountData = json.readValue(response.header("X-RoomPicker-Account"), Account.class); accountConsumer.accept(accountData); var exceptionClass = response.header("X-Server-Exception"); diff --git a/server/src/main/java/ru/dragonestia/picker/security/AccountHeadersFilter.java b/server/src/main/java/ru/dragonestia/picker/security/AccountHeadersFilter.java new file mode 100644 index 0000000..e77fbe6 --- /dev/null +++ b/server/src/main/java/ru/dragonestia/picker/security/AccountHeadersFilter.java @@ -0,0 +1,36 @@ +package ru.dragonestia.picker.security; + +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.*; +import jakarta.servlet.annotation.WebFilter; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Component; +import ru.dragonestia.picker.model.account.Account; +import ru.dragonestia.picker.model.account.Permission; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@WebFilter +@Component +@RequiredArgsConstructor +public class AccountHeadersFilter implements Filter { + + private final ObjectMapper objectMapper; + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + var account = (Account) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + var data = new AccountData(account.getId().getValue(), new ArrayList<>(account.getAuthorities()), account.isLocked()); + + HttpServletResponse httpServletResponse = (HttpServletResponse) response; + httpServletResponse.setHeader("X-RoomPicker-Account", objectMapper.writeValueAsString(data)); + + chain.doFilter(request, response); + } + + public record AccountData(String id, List permissions, boolean locked) {} +}