Spring

[Spring] 로그인, 스프링 시큐리티

삶_ 2022. 8. 18. 07:59

 

HttpSession

  • 웹사이트에 방문한 사용자에 대한 정보를 저장하는 방법 제공
    • 웹 서버에 상태를 유지하기 위한 정보를 저장
    • ex. 로그인 시 사용자 정보, 장바구니 등
  • 모든 jsp에서 사용 가능
  • map 형식으로 관리 (key 값은 중복이 안된다)
  • 메서드
    • 값 생성
      • getSession(true)
        • 이미 세션이 있다면 그 세션을 돌려줌.
        • 세션이 없다면 새로운 세션 생성
      • getSession(false)
        • 이미 세션이 있다면 그 세션을 돌려줌.
        • 세션이 없다면 null을 돌려줌
    • 값 저장
      • setAttribute(String name(=key), Object value(=value))
    • 값 얻기
      • getAttribute(String name(=key))
    • 값 제거
      • invalidate()
        • ex. 로그아웃. 묶여있는 모든 속성 제거함
      • removeAttribute(String name)
        • 특정 이름의 속성 제거




RedirectAttributes

  • HTTP GET 메서드 방식
    • 하지만 이건 URL이 노출되지 않음 (POST 와 착각이 듬)
    • GET 방식은 원래 ? + 파라미터를 붙여 전달해 URL이 노출됨
  • 요청 처리 후 redirect 시, 데이터를 넘기는 방법
    • 요청이 있으면 응답이 생기는데,
    • 사용자가 권한이 없는 페이지에 실수로 들어가게 될 경우
    • 다른 페이지로 이동하게끔 redirect 가 필요함
      • 메인페이지 -> 권한없는 페이지A -> 권한 얻는 페이지B -> 권한얻고 다시 그 페이지A 로 이동
  • 메서드
    • addAttribute("라랄라", msg);
      • 새로고침해도 데이터는 유지됨
      • String으로 변환 가능한 타입만 넘길 수 있음
        • 속성 넘기기 - url에 노출됨. 쿼리 파라미터로 표시
        • ?msg=라랄라
    • addFlashAttribute("라랄라", msg)
      • 데이터가 한번만 사용됨
        • 데이터가 2개 이상이라면 map을 이용해 전달해야 함
        • 객체로 전달 가능
      • jsp 파일에서 ${msg} 하면 "라랄라" 출력됨



Spring Security

  • 단방향 해시함수 사용(암호화) 하는 라이브러리
    • ex. 비밀번호 암호화하기
    • pom.xml 에 라이브러리 추가
  • 메서드
    • PasswordEncoder
    • BcryptPasswordEncoder : Bcrypt 해시 함수를 사용하여 비밀번호 암호화
      • 보통 이걸 사용
      • 인터페이스 PasswordEncoder 의 구현 클래스
      • encode(b) : 비밀번호 단방향 암호화 하기
      • matches(a,b) : 암호화되지 않은 비밀번호, 암호화된 비밀번호 비교

 

BCryptPasswordEncoder pwdEncoder;

MemberVO login = service.login(vo);
boolean pwdMatch = pwdEncoder.matches(vo.getUserPass(), login.getUserPass());

// 겉으로는 문자열 자체가 다르기에 다른 문자같지만,
// matches를 통해 같은 문자(true) 임이 증명됨