본문 바로가기

Java Spring28

SessionId 사용하여 로그인한 회원이 작성한 글 DB에 저장하기 Member(회원)와 Post(게시글) entity가 1 : N 관계일 때, 로그인 한 회원이 글을 작성했을 때 DB에 회원 정보와 함께 저장되도록 하는 기능을 구현해보았습니다. 방법을 몰라서 이런 저런 시도를 두 시간 가량 해보다가 구글링과 그 간 배웠던 지식들을 토대로 결국에는 구현해낼 수 있었습니다. 필요하신 분께 도움이 되면 좋겠고, 더 좋은 방법이 있다면 알려주시면 감사하겠습니다. 여기서는 Form login을 사용했고 session id로 인증하는 방법을 사용했습니다. 1. SecurityFilterChain을 보면 "/v1/post/**" 경로에는 인증된 사용자만이 접근하여 글을 작성할 수 있도록 권한 설정을 해두었습니다. @Configuration public class AppSecurit.. 2022. 8. 15.
@Controller와 @RestController의 차이점 @Controller와 @RestContoller의 차이점이 궁금함에도 유사한 기능을 하나보다 하며 넘어갔었습니다. 그런데 역시나.. 기능이 다르다는 걸 알게되었고, 이 참에 그 둘의 차이에 대해서 좀 더 알아보려고 합니다. 먼저 문제가 있던 코드는 아래 코드였습니다. 제 의도는 /login 으로 접속했을 때, template directory에 저장되어 있는 loginForm.html을 view로 보여주는 것이었습니다.그런데 의도와는 다르게 return 해주는 String 값이 화면에 나왔습니다. 보통 이런 경우는 @ResponseBody가 붙어있을 때 나타나는데, 그것도 없고 어떤게 문제일까 생각해보았습니다. 그러다가 @RestController를 @Controller로 바꾸어보았고, 원래 의도대로 .. 2022. 8. 6.
JWT란? JWT 생성과 사용 방법 알아보기 이전에 알아보았던 인증과 인가에서는 Session을 사용했습니다. Session은 Http Request의 Stateless한 특성을 보완하기 위해 유저의 정보를 서버에 저장하기 위해 사용되는 수단입니다. 🏷 원래 Http Request는 State를 저장하지 않기 때문에 이미 종료된 요청에 대해서 기억하지 못합니다. 이러한 특성을 무상태성(Staelessness)라고 합니다. 유저가 로그인을 한 이후에 생긴 session 정보를 서버에 저장해두고, 인증이 필요할 때마다 session 정보를 비교하여 인증상태를 유지하게 됩니다. Session은 서버를 기반으로 수행하는 인증이기 때문에 요청 회수가 증가할 수록 서버 부담 역시 증가하게 됩니다. 이런 서버의 부담을 줄여주기 위해 고안된 방식이 Token 인.. 2022. 8. 5.
Authorization(인가)-인가 내부 절차 & 권한 설정하기 지난번에는 Authentication(인증)에 대해 알아보았고, 이번에는 사용자마다 접근 권한을 다르게 설정하는 authorization(인가)에 대해서 알아보겠습니다. 블로그에 글을 쓰려면 해당 블로그에 대한 관리자 권한이 있어야 글 쓰기 및 수정이 가능합니다. 해당 블로그 수정 권한이 없는 유저는 글 수정 페이지에 접근할 수가 없습니다. 웹사이트를 이용할 때 이런식으로 권한을 차등적으로 부여하는 경우가 상당히 많이 있습니다. Spring Security에서도 이런 권한 부여와 관련된 기능을 제공하는데, 내부 절차는 어떤지와 어떻게 구현하는지 차근차근 알아보겠습니다. Authorization 내부 절차 인가 작업은 FilterSecurityInterceptor에서 이루어질 수 있습니다. console창.. 2022. 8. 1.
MapStruct 사용 시 여러 Constructor가 있을 때의 문제점 객체 간 mapping을 위한 코드의 양을 많이 줄여주는 Mapstruct. 구체적인 사용법을 모르고 있다가 의도대로 MapperImpl이 생성되지 않게되며 파워 구글링 덕에 궁금증을 해결했습니다. 공식 문서가 왜인지 한번에 나오지 않아서 이 사이트 저 사이트 전전하다가 겨우 찾았습니다 ㅎㅎ 다행히도 공식 문서 안에는 궁금해 하던 내용이 잘 나와있었고, 이후에는 최소한 이 부분에 있어서는 헤매지 않을 것 같아서 안심입니다. 먼저 궁금증이 폭발했던 상황은 이렇습니다. Spring Data JPA를 사용하고 있기 때문에 Entity를 만들었고, PostDtoToEntity mapper가 필요했습니다. 처음 Entity code는 아래와 같았습니다. @Entity를 사용했기 때문에 @NoArgsConstruc.. 2022. 7. 31.
Authentication(인증) (2) - 로그인 절차 & 코드구현 대표적인 인증방식은 username과 password를 html form을 통해 전달받는 방식입니다. Filter에 대한 이전 포스팅에서 공식문서에 기재된 SecurityFilter의 종류를 보여드렸습니다. 그 filter들 중에 "UsernamePasswordAuthenticationFilter"라는 filter가 username과 password를 이용한 인증을 시도할 때 사용이 됩니다. 위의 flowchart가 인증 절차인데, 복잡해 보이지만 큼지막한 흐름만 얘기해보겠습니다. 1. Flowchart의 주황색 부분에 여러 SecurityFilterChain 중에 UsernamePasswordAuthenticationFilter가 동작하는 것을 볼 수 있습니다. 이제보니 filter 이름도 직관적으로 .. 2022. 7. 30.
반응형