Spring Security 11

20220223 개발일지

오늘은 추가 기능인 댓글 작성, 삭제, 조회하기를 팀원들과 함께 구현하였다. 추가기능이 많지 않아서 역할을 분담하기 어려웠다. 오늘 오후부터 시작했기 때문에 앞에 먼저 하신 진행상황을 보고 추가로 필요한 부분을 덧붙였다. 이미지를 S3에 저장하는 과정에서 application.properties에 서버 정보가 노출되는 문제가 있었다. properties를 하나 더 만들어 여기에는 공유되면 안되는 정보들을 넣고, 이 값을 .gitigore에 포함하여 깃허브에는 업로드 하지 않았다. 이런식으로 추가되는 파일을 원래 application.properties에 작성해주면 된다. spring.profiles.include=aws 프론트에서 S3에 완성된 코드를 올리고 테스트를 하는 과정에서 security에서 허..

20220216 개발일지 #JWT 구현 정리

프론트에서 로그인 작업을 빨리 끝내주셔서 금방 회원가입/로그인을 테스트해볼 수 있었다. 다행히 큰 이슈 없이 잘 작동하는 것을 확인할 수 있었다. 헤더에 보낸 토큰이 프론트에서 안보이는 문제가 있었는데, cors를 수정해서 해결했다. 특히 exposeHeaders("Authorization")은 반드시 포함해야한다. @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("") .allowedMethods("GET", "POST", "PUT", "DEL..

20220214 개발일지 #Spring security 아키텍처 공부하기

현재 로그인은 기본적으로 controller에 구현되어 있고(로직들이 controller에 너무 많이 들어가 있는 것 같아서 서비스에서 구현되도록 리팩토링했다.), 아마 authenticationManager가 인증하면서 코드에는 보이지 않지만 AuthenticationProvider ~ DB에서 User를 찾아서 UserDetails에 담아 리턴하는 것까지 이루어지는 것 같다. 여기서도 보면 UsernamePasswordAuthenticationFilter를 통해 Authentication Manager로 연결되고 이후 로직들이 처리되는 것을 볼 수 있다. (참고자료: https://webfirewood.tistory.com/115) formLogin을 Disable한 상태고 별도로 Filter를 커스..

20220212 개발일지 #스프링 시큐리티 세션 토큰으로 보내기

시큐리티를 우선 세션으로 하기로 했는데, 시큐리티는 기본적으로 formLogin방식이었다. 프론트 코드를 함께 보면서 얘기를 해봤는데 form이 아닌 json으로 로그인 값을 받아야 할 것 같았다. (axios는 서버 url 입력하는 부분이 있었는데, form은 그 부분이 없어서 어떻게 서버와 연결해야하는지 잘 모르겠다고 하셨다.) 그래서 시큐리티 설정의 formLogin을 disable로 하고 json으로 받는 방식으로 변경하였다. json으로 받기 위해서 LoginDto를 새로만들고 UsernamePasswordAuthenticationFilter를 상속받아 custom 클래스를 만들었다. LoginDto도 새로 만들어서 Filter가 가로챈 값을 넣어주었다. public class CustomUse..

20220208 개발일지

코드잇에서 cs 듣던 부분을 모두 들었다. 강의가 세세하지는 않지만 큰 흐름을 잡기에 좋은 것 같다. 다른 강의들도 조금씩 들어야겠다. JAVA랑 Spring 공부하려고 산 책을 스캔했다. 세세하게는 못봐도 항해하면서 1회독 하는걸 목표로 해야겠다. Service부분을 추가적으로 리팩토링했다. 처음에는 혼자 리팩토링하는게 어려웠지만 매개변수와 return값만 잘 지정하고 나면 크게 어렵지 않았다. security 권한 부여는 @Secured를 사용했다. 그런데 프론트를 구현해놓지 않아서 ARC로는 테스트가 한계가 있었다. 기존에 테스트 코드도 기능들이 추가되면서 수정이 필요한 상황이었다. 처음에는 기존에 있는 코드에서 수정을 하려고 했는데, security 부분이 들어가서 쉽지 않았다. controlle..

20220207 개발일지 #기능일부 추가

오늘은 개인공부 위주로 하고 저녁에 과제 추가기능을 일부 구현하였다. 심화 5주차 강의를 다 듣고, 코드잇에 컴퓨터 아키텍처 강의가 있어서 cs 스터디 공부를 위해 들었다. 회로 부분은 여기에도 자세히 설명되어 있지 않아서 이해가 안가지만 CPU가 돌아가는 부분은 도움이 많이 됬다. 레지스터나 RAM 부분에서 어떻게 작동는지, 코드를 작성하면 이게 어떤 과정을 거쳐서 실행되는지 큰 틀은 조금 잡은 것 같다. 추가 기능은 배달 가능 음식점 조회하기, 배달비 추가 할증 부분을 구현하였고 스프링 시큐리티도 기본 회원가입/로그인 부분은 구현하였다. 처음에 시작하기 전에 어려워 보여서 엄청 겁을 먹었는데 배달 가능 지역은 거리 계산하는 방법을 해결한 뒤에는 어렵지 않게 구현할 수 있었다. 스프링 시큐리티도 지난주..

20220203 개발일지 #개인과제 정리

어제 새벽에 테스트 코드 구현은 했지만 테스트 코드로서의 기능은 제대로 못하는 것 같다. 오전에 username 중복 검사 부분을 프론트에서 넘겨주는 부분과 별개로 회원가입 서비스부분에 따로 구현을 해주고 다시 테스트 코드를 완성하였다. 오후에 심화 4주차 강의를 시작했고 팀과제를 마무리하였다. 이번주에는 자바나 알고리즘의 거의 손을 못댔는데, 앞으로도 틈틈히 잘 볼 수 있을지 걱정이 된다. 심화 강의에 디버깅을 하는 부분이 있었는데 앞으로 코드를 짤 때 중간중간 확인하면서 작업하기 좋을 것 같다. 개인과제 프로젝트 : 로그인 기능이 포함된 게시판 구현하기 github: https://github.com/paran22/springprac2 전체적으로 구현해야할 기능이 많았다. 기능 구현하면서 회원가입 유..

20220202 개발일지

오늘은 회원가입 유효성 검사 부분을 진행하고 테스트 코드를 작성하였다. 다른 분들과 과제 한 내용을 얘기하면서 다른 방식으로 수정하기도 하고, 이 방법이 좋은 방법인지에 대해서도 더 생각해보게 되었다. 1. 회원가입 유효성 회원가입 유효성은 validation을 이용하여 스프링 서버 자체에서 검사를 하는 것으로 작성을 했었는데, 회원가입 데이터를 굳이 서버에 넘겨서 다 유효성 검사를 해야되는지 고민이 되었다. 프론트에서 일단 유효성검사를 마친 데이터만 서버로 보내주고 싶어서 서버에 있는 부분을 지우고 프론트에서 유효성 검사를 하는 코드를 작성하였다. 기존에 회원가입이 form action으로 들어가 있었는데 ajax로 변경하니 계속 에러가 났다. 해당 컨트롤러에 return값이 redirect:/user..

20220131 개발일지 #@Valid

오늘도 개인 과제를 위주로 하였다. 우선 로그인 여부에 따라서 프론트에서 보이는 버튼을 다르게 설정하였다. 타임리프에 security와 관련해서 사용할 수 있는 문법이 있어 간단하게 구현할 수 있었다. 각 페이지별로 필요한 버튼들을 인증 여부에 따라 설정하였다. 로그인 회원가입 글쓰기 로그아웃 그리고 댓글을 작성자 본인만 수정, 삭제할 수 있도록 구현하였다. 로그인 여부가 아니라 작성자 본인으로 권한을 설정해야해서 어려웠다. detail 페이지에서 로그인한 작성자의 id를 불러와서 댓글에 저장한 userId와 동일한 경우에만 수정, 삭제 버튼이 보이게 하였다. html 페이지에서 로그인 정보를 어떻게 확인해야 하는지, 그리고 이 정보를 ajax로 불러온 userId와 어디서 비교를 해야할지 고민이 많았다..

20220129 개발일지

오늘은 개인과제의 페이지들은 모두 구현하는 것으로 목표를 정했다. 게시판 글쓰기(/write)를 다른 페이지로 분리하고, detail페이지를 완성하였다. 첫날 진행하면서 페이지 구현방식에 고민이 있었는데, 페이지 로드는 기본적으로 타임리프를 사용하여 controller에서 해당 html을 return해주는 식으로 했고, 그 다음에 ajax를 통해 필요한 데이터들을 restcontroller 방식으로 불러왔다. 게시글 상세보기같은 경우에는 게시글 박스에 링크를 걸어서 누르면 /detail로 이동하게 하였고, 조회할 게시글 id값도 보내주었다. 다음과 같이 url로 하면 해당 url에 접속했을 때 detail.html이 return되도록 controller에 작성해주어야 한다. 혹은 detail.html을 ..