inblog logo
|
vosw1
    Spring

    27. Spring Security : 적용하기

    Feb 13, 2024
    27. Spring Security : 적용하기

    1. 서버 사이드 랜더링(Server-Side Rendering, SSR)

    • 자바코드를 해석해서 렌더링해주고 그 순수한 html을 버퍼에 담아서 전송
    • 웹 애플리케이션을 클라이언트 측이 아닌 서버 측에서 초기에 렌더링하는 방법
    웹 페이지의 HTML을 동적으로 생성하여 클라이언트에 제공
    • 자바 코드는 템플릿 엔진이나 프레임워크를 사용하여 HTML을 생성
    클라이언트에게 버퍼에 담아 전송함
    • 일반적인 SSR 프로세스
    - 클라이언트 요청이 서버에 도달합니다.
    - 서버는 요청된 자원을 처리하기 위해 자바 코드를 실행
    - 자바 코드는 DB에서 데이터를 가져오거나 다른 서비스와 통신하여 필요한 정보를 수집
    - 수집한 정보를 바탕으로 자바 코드는 HTML을 생성하고, 동적으로 데이터를 삽
    - 생성된 HTML을 클라이언트에게 전달하기 전에 버퍼에 담아 전송
    - 클라이언트는 전달받은 HTML을 렌더링하여 사용자에게 보여줌
     

    2. UserController에 기존 로그인 코드 주석처리하기

    @PostMapping("/login") public String login(UserRequest.LoginDTO requestDTO) { // 1. 유효성 검사 if (requestDTO.getUsername().length() < 3) { return "error/400"; } // 2. 모델 필요 select * from user_tb where username=? and password=? User user = userRepository.findByUsernameAndPassword(requestDTO); // DB에 조회할때 필요하니까 데이터를 받음 if (user == null) { return "error/401"; } else { session.setAttribute("sessionUser", user); return "redirect:/"; } }
     

    3. Spring Security 적용하기

    • 프로젝트 생성시 spring security lib을 선택하면 됨
    우리는 선택을 안해서 생성했기 때문에 추가로 다운받아 추가해야 함
    notion image
    notion image
    notion image
    • 버전이 고정됨 -> 다른 버전을 사용할 경우 오류가 남!
    • 버전을 안 적는게 좋음
    버전을 안 적으면 자동으로 버전을 맞춰 줌
    notion image
    notion image
    • 서버 시작 시 password 확인하기
    notion image
    username : user password : 7d1f36fd-fc91-4ac6-82b3-6b78b08fd9d6 // hash 코드로 암호화된 password
     

    4. 메인 페이지로 테스트하기

    • 모든 페이지가 Blocking됨 → 인증 없이는 들어갈 수 없음
    • 내부적으로 페이지가 만들어지고 /login으로 자동 리다이렉트 됨
    notion image
    notion image
     
    • 기존 : 인증이 필요한 페이지는 직접 설정함
    session 가져와서 비교해서 직접 구현했음
    • security : 모든 주소가 다 인증이 필요한 페이지로 변경됨
    커스터 마이징 해야 함
     

    5. 현재 상태 : username, password 입력만 가능함

    notion image
    notion image
     

    6. Security의 Filter vs Tomcat의 Filter

    notion image
    • Apache가 혼자서 일할 수 없는 구조 : 전부 자바코드가 동작하고 coontroller로 가야 함
    • Security의역할 : 필터링
    request의 uri 주소를 낚아챔
    • 기본 역할 : 문지기 / 보안 유지 - 필터(SF) : 걸러냄
    아무 설정도 안하면 /이하로 들어오는 모든 주소를 blockong해서 막아버림
    • F : web/xml을 보고 일하는 문지기와 CONTEXT가 다름
    F - 톰캣 것, 톰캣에서 설정, 톰캣의 입구에서 동작
    SF - 스프링 것, 톰캣을 통과해서 서블릿에 들어오기 전에 동작
    기본적으로 다 막혀있음 → 필요한 부분들만 풀어주면 됨
    • F의 단점 : DI가 안됨 / DB에 접근이 안됨
    DI를 위해서 나중에 이 필터를 SF내부로 끌어당겨서 옮겨서 씀 /
    이때 델리케이트 패턴이 필요함
    • 델리케이트 패턴(Delegate Pattern)
    객체가 다른 객체에게 일부 기능을 위임하는 패턴
    위임을 통해 객체 간의 결합도를 줄여줌
    위임받는 객체가 특정 작업을 처리하고, 위임하는 객체는 해당 작업을 위임받는 객체에게 위임
     
    • Persistent Content : 데이터나 콘텐츠가 지속적으로 보존되는 것
    주로 데이터베이스나 파일 시스템과 같은 저장 매체에 저장되어 지속
    사용자가 페이지를 새로 고침하거나브라우저를 닫은 후에도 사용 가능한 것
    → 데이터베이스에 정보를 저장하고 필요할 때마다 가져와서 보여줌
     
     
    Share article

    vosw1

    RSS·Powered by Inblog