Spring 65

Spring Security 관련 CORS에러

WebSecurityConfigurerAdapter는 Spring Security 5에서 Deprecated 되었고 Spring Security 5.0.5부터 사용할 수 없습니다. 대신에 SecurityConfigurerAdapter를 사용하거나 SecurityFilterChain을 사용할 수 있습니다. 이런 경우에 SecurityConfigurerAdapter를 사용하는 방법은 아래와 같습니다: @EnableWebSecurity public class SecurityConfig extends SecurityConfigurerAdapter { @Override public void init(HttpSecurity http) throws Exception { http // 여기에 다른 보안 설정이 있을 수..

Spring 2023.06.12

RequestParam과 RequestBody의 차이

@RequestParam과 @RequestBody는 Spring에서 HTTP 요청의 데이터를 처리하는 데 사용되는 두 가지 어노테이션이며, 각각 서로 다른 유형의 데이터를 처리합니다. @RequestParam: 주로 URL의 쿼리 파라미터를 처리하는 데 사용됩니다. GET, POST 등 모든 HTTP 메서드에서 사용할 수 있습니다. 주로 단순한 데이터 타입의 경우 사용하며, 주로 폼 데이터와 함께 사용됩니다. 예: http://localhost:8080/api/users?id=1에서 id 값을 가져오는 경우 @RequestParam("id") int id를 사용합니다. @RequestBody: 주로 HTTP 요청 본문의 내용을 처리하는 데 사용됩니다. 주로 POST, PUT 등의 메서드에서 사용되며, J..

Spring 2023.04.28

Session 과 토큰기반 둘다 사용하면 보안이 더 잘될까?

로그인이 완료되었을 때 세션과 로컬 스토리지에 토큰을 저장하는 방법을 동시에 사용하는 것이 보안을 강화하는 것처럼 보일 수 있지만, 실제로는 그렇지 않습니다. 세션과 로컬 스토리지 모두에 토큰을 저장하는 것은 오히려 공격 범위를 늘리고, 보안 문제를 증가시킬 수 있습니다. 각 저장소의 특성과 함께 사용해야 하는 경우를 이해하는 것이 중요합니다. 세션 기반 인증: 서버 측에서 사용자 상태를 저장하고 관리합니다. 서버에 부담이 더 많이 가지만, 일반적으로 보안이 더 강합니다. 쿠키를 사용하여 세션 ID를 저장하고, 서버에서 사용자를 인증합니다. 토큰 기반 인증 (예: JWT): 상태를 저장하지 않고 클라이언트 측에 토큰을 저장하여 사용합니다. 서버의 부담을 줄이지만, 로컬 스토리지나 쿠키를 사용할 때 XSS..

Spring 2023.04.27

백엔드에서 멤버인증 방법

프론트엔드에서 요청을 보내지 않아도 백엔드에서 로그인된 멤버 객체를 유지하고 싶다면, 서블릿 컨텍스트에 멤버 객체를 저장하는 방법도 가능하지만, 이는 매우 권장되지 않는 방법입니다. 서블릿 컨텍스트는 전역 범위를 가진 컨텍스트로서, 모든 사용자가 공유하게 됩니다. 따라서 이를 사용하면, 모든 사용자에 대한 정보가 같은 공간에 저장되어 보안상 문제가 발생할 수 있습니다. 대신 다음 방법 중 하나를 사용하는 것이 좋습니다. 세션 사용하기: 세션은 각 사용자마다 고유한 저장 공간을 제공하며, 사용자가 로그인할 때 생성되고 로그아웃하거나 세션이 만료될 때 소멸됩니다. 세션에 멤버 객체를 저장하고 AOP에서 사용하는 방법은 다음과 같습니다. // 로그인 성공 시 세션에 멤버 객체 저장 request.getSess..

Spring 2023.04.27

토큰 저장할 때 로컬스토리지와 쿠키

쿠키에 토큰 저장: 이 방식에서는 서버 측에서 생성한 토큰을 쿠키에 저장하고, 이후 요청 시 쿠키를 사용해 인증 정보를 전달합니다. 쿠키는 HttpOnly 옵션을 설정하여 자바스크립트를 통한 접근을 방지할 수 있습니다. 이렇게 하면 크로스 사이트 스크립팅(XSS) 공격의 위험을 줄일 수 있습니다. 쿠키를 사용하면 CSRF(Cross-Site Request Forgery) 공격에 취약해질 수 있습니다. 하지만 이를 방지하기 위해 CSRF 토큰을 사용하는 등의 보안 조치를 적용할 수 있습니다. 로컬 스토리지에 토큰 저장: 이 방식에서는 서버에서 생성한 토큰을 클라이언트에 반환한 후, 클라이언트 측에서 로컬 스토리지에 토큰을 저장합니다. 로컬 스토리지에 저장된 토큰은 자바스크립트를 통해 접근할 수 있기 때문에..

Spring 2023.04.27

@jsonIgnore의 문제점

멤버엔티티에 이렇게 있을때 fetch join을 넣어줘도 JsonIgnore된 칼럼은 못가져오더라 이 코드를 보면, @JsonIgnore 어노테이션이 authority 필드에 적용되어 있습니다. , @JsonIgnore는 JSON 변환 시 해당 필드를 무시하라는 지시입니다. JPQL 쿼리에서 join fetch를 사용하면서 m.authentications와 m.authority를 모두 가져오도록 지시하고 있으므로, Optional 객체에는 authority가 포함되어 있을 것입니다. 그러나 @JsonIgnore 어노테이션 때문에 JSON 변환 시 authority 정보는 제외됩니다. 따라서 Optional 객체에는 authority가 포함되어 있지만, JSON으로 변환할 때는 제외됩니다.

Spring 2023.04.27

@Lob과 columnDefinition = "TEXT"

@Column 어노테이션은 필수는 아니지만, 엔티티의 속성과 데이터베이스 테이블의 컬럼을 더 명확하게 매핑하려면 사용하는 것이 좋습니다. @Column 어노테이션을 사용하면 컬럼의 이름, 길이, 널 허용 여부, 고유 여부 등의 속성을 지정할 수 있습니다. 어노테이션을 생략하면 JPA가 기본값을 사용하여 매핑하게 됩니다. 기본적으로 @Column 어노테이션을 사용하지 않을 경우, JPA는 문자열 필드에 대해 기본적으로 VARCHAR(255) 타입을 사용합니다. 따라서 subTitle과 description은 기본적으로 최대 255자까지 저장할 수 있습니다. 만약 더 긴 길이의 문자열을 저장하고 싶다면, @Column 어노테이션을 사용하여 length 속성을 지정할 수 있습니다. 예를 들어, subTitle..

Spring 2023.04.26