SpringBoot 7

[SPRING SECURITY] 시큐리티 파헤치기 (4) - AUTHENTICATION

DaoAuthenticationProvider 로그인시 username과 password를 제출하면 UsernamePasswordAuthenticationFilter가 Authentication 타입의 UsernamePasswordAuthenticationToken을 만들어 AuthenticationManager에게 전달되고, DaoAuthenticationProvider에게 전달된다. DaoAuthenticationProvider는 token의 username을 이용해 UserDetailsService에게 Userdetails을 요청받고, PasswordEncoder를 통해 UserDetails의 password와 token의 password를 비교한다. 인증에 성공하면 UsernamePasswordA..

JAVA(SPRINGBOOT) 2023.03.23

[SPRING SECURITY] 시큐리티 파헤치기 (3) - AUTHENTICATION

Servlet Authentication Archittecture SecurityContextHolder 누가 인증되었는지에 대한 정보가 저장되는 공간 SpringSecurity 인증의 핵심 SecurityContext를 포함 SpringSecurity는 SecurityContextHolder가 어떻게 채워지는지 신경쓰지않음 값이 저장되어있으면 현재 인증된 User로 사용된다. // Setting SercurityContextHolder SecurityContext context = SecurityContextHolder.createEmptyContext(); Authentication authentication = new TestingAuthenticationToken("username", "passw..

JAVA(SPRINGBOOT) 2023.03.22

[SPRING SECURITY] 시큐리티 파헤치기 (2) - ARCHITECTURE

Spring 공식 문서를 정리할 것이며, 나름의 이해와 생각을 함께 정리할 예정이다. Spring Security? 인증, 인가, 외부 공격으로부터의 보호 기능을 제공하는 프레임워크 자바 8 이상의 Runtime 환경 필요 스프링 시큐리티는 Servlet Container와 통합되기 때문에 Servlet Container가 동작하는 어떤 어플리케이션에서도 동작한다. 시큐리티를 위해 스프링을 사용할 필요는 없다. Sring Boot + Spring Security Spring Boot Auto Configuration 스프링 시큐리티 기본 설정을 활성화하여, springSecurityFilterChain이라는 이름을 가진 servlet Filter을 빈으로 생성 이는 어플리케이션에서 보안에 관련된 모든 것..

카테고리 없음 2023.03.17

[SPRING SECURITY] 시큐리티 파헤치기 (1)

이제껏 로그인/로그아웃은 스프링 시큐리티(Spring Security)를 이용해 구현해왔다. 어플리케이션의 보안은 가장 중요한 부분 중 하나일텐데 얇은(?) 이해를 가지고 기능 구현만 해오고 원리를 정확히 파악하지 않았다. JWT나 OAuth 로그인 기능을 추가할 땐 매번 버벅이며 시간을 허비했다. 그래서 나는 시큐리티를 내가 가능한 범위에서 최대한 파고들어볼 생각이다. 먼저, 내가 지금껏 이해한 로그인 과정은 다음과 같다. 1. client로 부터 username과 password 정보를 받는다. 2. UserDetailsService의 loadUserByUsername을 통해 DB에서 username을 가진 객체를 찾고 존재한다면 UserDetails객체를 생성해 반환한다. 3. 요청 받은 passw..

JAVA(SPRINGBOOT) 2023.03.16

[SPRINGBOOT] 좋아요 수 표현

CRUD 게시판을 구현하며 좋아요 기능을 추가하며 당연하지만, 놓치고 지나간 것을 정리하고자 글을 작성한다. 먼저, 아래는 좋아요 수를 나타내기 위해 처음 작성한 코드이다. @Entity @NoArgsConstructor @Getter public class Post { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; @Column private long heartNum; @OneToMany(fetch = FetchType.LAZY, mappedBy = "post", orphanRemoval = true) private List heartList = new ArrayList(); @Builder public Post(String ..

JAVA(SPRINGBOOT) 2023.03.09

[ERROR] redis 사용시 같은 Key값으로 다른 프로젝트에서 저장

redis를 이용해 채팅 기능을 구현하는 중이었다. 채팅방 생성은 ARC를 통해 redis에 저장할 수 있었으나 메세지 보내는 socket 통신 확인이 어려워 새 프로젝트를 생성하고, 실습을 계속 이어갔다. 새 프로젝트폴더에서도 채팅방 생성까지는 잘 되었으나 채팅방 목록을 불러오는 과정에서 다음과 같은 에러에 부딪혔다. com.team1.dodam.domain.ChatRoom은 기존 프로젝트 폴더의 채팅방관련 파일이다. 처음에는 전혀 감을 잡지 못해 '왜 ChatRoom을 찾지 못 할까?' 하고 구글링만 했다. 그러던 중 문득 기존 프로젝트에서 채팅방 생성을 한게 떠올랐고, 새 프로젝트에서 컴파일해 실행할 때 기존 프로젝트 관련 정보를 찾지 못하는게 당연하다는 생각이 들었다. 그래서 redis내에 저장된..

TROUBLE SHOOTING 2022.09.14

[ERROR] BUILD후 jar 실행 시 생기는 에러

부트캠프를 하며 과제를 한 후 빌드 파일을 만들어 배포하는 과정에서 jar파일을 실행하는 과정에서 에러가 발생했다. 위와 같이 에러가 발생했는데 에러 이유를 찾아보다 Lookup method resolution failed Failed to introspect Class 두 가지 문구로 부터 에러 발생 이유를 찾을 수 있었다. 컴파일 후 실행하는 과정에서 Class를 불러올 수 없는게 문제였다. build.gradle의 dependency에 compileOnly 'com.auth0:java-jwt:3.19.2' 위와 같이 작성되어 있었고, implementation 'com.auth0:java-jwt:3.19.2' 다음와 같이 수정해주었더니, 에러가 해결되었다.

TROUBLE SHOOTING 2022.08.04