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