분류 전체보기 33

[JS] 실행 컨텍스트

실행 컨텍스트(Execution Context)란? 실행할 코드에 제공할 환경정보를 모아놓은 객체 자바스크립트는 실행컨텍스트를 콜스택에 쌓은 후 실행하여 코드의 환경과 순서를 보장 FILO(First In, Last Out) 구조로 순서보장, 내부의 컨텍스트로부터 환경 보장 내가 이해한바로는 Context는 단어 그 자체로 흐름이라고 이해하면 좋을 것 같다. 아래의 예시를 보며 이해해보자 function B() { console.log('func b'); } function A() { B(); } A(); 위의 자바스크립트가 실행되면 1. 전역 컨텍스트가 콜스택에 담긴다. 2. 전체의 흐름을 이어가기 위해서 A라는 흐름을 알아야하기 때문에 A라는 Context가 콜 스택에 push 3. A라는 흐름을 이..

JAVASCRIPT(VUE.JS) 2023.03.28

[SPRINGBOOT] Spring Security 로그인 처리

시큐리티에서 기본적으로 제공하는 폼로그인을 이용해 로그인 기능을 구현하는 과정에서 생긴 문제이다. 나는 스프링부트와 뷰를 통해 프로젝트를 구성할 계획이며, 로그인 성공시 확인할 데이터를 얻기 바라며 postman을 통해 테스트를 진행했다. postman으로 로그인를 시도하여 성공하면, 서버측 "/"로 redirect되며 404에러가 발생했다. 로그인자체는 성공한 것 같으나, response를 통해 로그인 후처리를 프론트단에서 해야했기때문에 바람직한 Response가 아니었다. 그래서 처음엔 서버에 아래와 같이 GET "/" 의 controller를 만들어 원하는 데이터를 반환하도록 했으나, 로그인 성공시 "/"에 데이터를 요청한다는 것이 꽤나 비효율적이라고 생각했다. 그래서 찾아보던 중 LoginSucc..

TROUBLE SHOOTING 2023.03.23

[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

[JPA] PAGEABLE

JPA로 Pageable을 활용한 pagination을 구현하기 위해서는 다음과 같이 Pageable 객체를 인수로 넘겨주면 된다. GET /users?email=test&page=3&size=10&sort=id,DESC 위와 같은 url로 controller에 요청이 오면 페이지에 관련된 정보 (page, size, sort)가 Pageable 객체로 매핑된다. public interface UserRepository extends JpaRepository { List findAllByEmail(String email, Pageable pageable); Page findAllByEmail(String email, Pageable pageable); Slice findAllByEmail(String e..

JAVA(SPRINGBOOT) 2023.03.13

[AXIOS] PUT 403 에러

Vue.js도 익히고, SpringBoot도 복습할 겸 두 프레임워크를 이용해 게시판을 만들다가 403 에러를 만나 공부태도를 바로 잡기 위해 글을 쓴다. 에러내용은 다음과 같다. axios .put('http://localhost', { headers: { 'Authorization' : this.$store.state.accessToken, } }) .then((res) => { console.log(res); }) .catch((err) => { console.log(err); }); 다음과 같이 서버로 요청을 보냈는데, 계속해서 403 forbidden 에러가 발생했다. 처음엔 권한문제인줄 알고 jwt filter에서 디버깅을 했는데 아예 filter로 들어오지도 못했다. (다시 생각해보면 GET..

TROUBLE SHOOTING 2023.03.10