본문 바로가기

Spring_SpringBoot

(42)
[ Spring Security 6 ] - 6, SuccessHandler, FailerHandler 1) SuccessHandler 1) SecurityContext securityContext = this.securityContextHolderStrategy.getContext(); 부분    SpringSecurity가 6버전으로 Update되면서 가장 큰 부분이라고 생각한다.    옛날에는 SpringSecurityHolder에 따로 인증 사실을 처리하지 않아도 자동으로 로그인 처리가 되었다.    → 옛날 버전인 것 같음     그런데 이제는 SpringSecurityHolder에게 인증 사실을 알려줘야 한다. 2) SavedRequest savedRequest = requestCache.getReqeust(req, res);    기존 로그인 시도하려던 URI를 SpringSecurity가 저..
[ Spring Security 6 ] - 5, AuthenticationProvider, UserDetailService, UserDetail 사용자의 아이디와 비밀번호는 AuthenticationManager가 담당한다. 그 객체로 실제로 권한이나 인증을 체크하는객체는 AuthenticationProvider에서 Override한 Authentication 객체이다.  1) AuthenticationProvider  1) UserDetails user = customUserDetailsService.loadUserByUsername(username);usernamePasswordAuthenticationFilter를 통해서 얻어온(사용자가 입력한 이름)을 통해 DB조회한다. 2) 마지막에 있는 supports는 그 전에 UsernamePasswordAuthenticationFilter를 통해서 얻어온 값이 유효한    토큰인지 확인하는 것이다..
[ Spring Security 6 ] - 4 , UsernamePasswordAuthenticationFilter 필자의 경우 데이터를 프론트에서 JSON으로 받아왔기 때문에 데이터에 가공을 해야 했다.ObjectMapper를 이용해 JSON으로 받아온 데이터를 다시 Stirng username과 password로 변경해서 토큰을 받을해Authentication에 저장했다. 즉 Authentication은 사용자가 입력한 값을 저장하게 된 메소드이다.이를 통해 후에 보게 될 UserDetailService를 통해서 DB조회 후 아이디와 비밀번호를 체크한다.
[ Spring Security 6 ] - 3 , AccessDeniedHandler, AuthenticationEntryPoint 큰 의미는 없는 카테고리이다. 개인적으로 기억하기 위해서 적는 것이다. AccessDeniedHandler를 통해서 인증(로그인 실패)이 되지 않았는데 권한 페이지에 접근 시 401에러AccessDeniedHandler를 통해서 인가(권한 획득 실패)가 되지 않았는데 권한 페이지에 접근 시 403에러 → 필자의 경우는 따로 관리자 페이지는 만들지 않았다. 나중에 만들기 위한 참고 위해서 만들었다.
[ Spring Security 6 ] - 2 , SecurityConfig 이 부분은 SpringSecurity를 Filter에 등록하게 되면서 주요한 설정들을 담는 클래스이다.  1) CORS 예방  나의 프론트 서버는 3000번이고 백엔드 서버는 8080이다. 당연히 동일 출처 정책에 위배되므로 CORS 에러가 나게 된다. 그러므로 filter에게 알려주는데 이것이 CorsConfigurationSource 객체이다. 1) CorsConfiguration → 3000번에서 오는 요청에 대해 다 허용한다는 의미이다. 2) UrlBasedCorsConfigurationSource→ 3000번에서 오는 것 중에 모든 urI를 허용해주는 것이다. 2) 정적 리소스 filter 제외 1) *.js, *.css, *.image같은 경우는 필터를 거치지 않고 그냥 다 받아준다는 의미이다..
[ Spring Security 6 ] - 1 개발환경front : vue3 port3000back : springboot 3.3.1, spring security 6.3.1 port8080 예전 Spring Security를 했을 때는 발생하지 않았던 문제들이나 바뀐 것 때문에 설정에 대해서 애를 먹었다.현재 구글링을 해도 Spring Security 6 버전에 대한 설명이 나와있는 경우도 별로 없어서 정리해야겠다.  우선 내가 설정한 클래스들이다. 기존의 SpringSecurity를 이용하는게 아니라 커스텀(내가 다시 재정의해서 사용하는 것)했다. 흐름SecurityConfig → CustomAuthenticationEntryPoint → CustomAccessDeniedHandler → CustomAuthenticationProviderCust..
[ WEB ] [ WAS ] 개인적으로 HTTP요청이 들어오면 WEB에는 정적인 콘텐츠, WAS는 동적인 컨텐츠를 가져오는 것은 안다.대략적으로 알지 말고 쫌 자세히 알아보자. 다음은 클라이언트와 서버와의 통신 이해를 위한 그림이다.  1. WEB웹 서버는 요청이 정적 페이지면 자신이 처리하고, 동적 페이지에 관한 메세지가 있으면 웹 어플리케이션 서버에위임하게 된다. 데이터의 수정, 삭제 등의 조작이 필요할 땐 웹 애플리케이션 서버는 데이터 베이스 서버와 연동하여데이터를 수정하고, 요청의 결과를 html파일로 만들어서 웹 서버에 반환한다. → Tomcat으로만 하면 문제인 이유Tomcat WAS자체에서도 정적인 콘텐츠(HTML, CSS, JavaScript, 이미지 파일 등)를 서빙한다. HTTP 프로토콜을통해 클라이언트 요청을 처..
[ SOLID ] VS [ 싱글톤 ] 싱글톤을 사용하면서 궁금한 사항이 생겼는데 싱글톤 패턴을 생성하면 SOLID에 위배되는 거 아냐?? 일단 SOLID 정리하자. 1. Single Responsibility Principle (SRP)단일 책임 원칙은 클래스나 모듈이 하나의 책임만 가져야 한다는 원칙이다. 이를 통해 변경 이유가 하나로 제한되고코드의 응집도가 높아진다. 2. Open/Closed Principle (OCP)개방/폐쇄 원칙은 소프트웨어 개체(클래스, 모듈, 함수 등)가 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 한다는원칙이다. 즉, 기존 코드를 변경하지 않고 기능을 추가할 수 있어야 한다. 3. Liskov Substitution Principle (LSP)리스코프 치환 원칙은 서브타입은 언제나 자신의 기반 타입으로 ..