마트철수

[070] Spring 로그인과 로그아웃 처리 본문

KB IT's Your Life/교육

[070] Spring 로그인과 로그아웃 처리

마트스 2024. 8. 20. 17:34

 

2024.08.20(화)
 
Spring 11일차

 


 

Spring


 

PART01

  • CH02. 스프링의 특징과 의존성 주입
  • CH03.1 스프링 MVC의 기본 구조
  • CH03.2 스프링 MVC의 Controller 1
  • CH03.3 스프링 MVC의 Controller 2
  • CH03.4 SpringLegacy 업데이트
  • CH04.1 스프링과 MySQL Database
  • CH04.2 MyBatis와 스프링 연동
  • CH05.1 영속, 비즈니스 계층의 CRUD 구현
  • CH05.2 비즈니스 계층
  • CH05.3 프레젠테이션(웹) 계층의 CRUD 구현
  • CH06.1 화면 처리
  • CH06.2 File, Upload, Download

Part 4. Rest API

  • CH07 Rest Controller
  • CH08.1 OpenApi
  • CH08.2 RestTemplate
  • Spring Security
  • CH10.2 로그인과 로그아웃 처리
  • CH10.3 member
  • CH10.4 UserDetails 사용하기

 


 

CH10.2 로그인과 로그아웃 처리


접근 제한 설정

 

SecurityConfig.java

  • RBAC

 

public void configure(HttpSecurity http) throws Exception { ...

 

 

인증 정보 설정

  • protected void configure(AuthenticationManagerBuilder auth)
    • 사용자 정보를 어디서(메모리, 파일, db 등) 얻을지 설정

protected void configure(AuthenticationManagerBuilder auth)

 

  • 두 명의 user을 등록
@Override
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
log.info("configure .........................................");
auth.inMemoryAuthentication()
.withUser("admin")
.password("{noop}1234")
.roles("ADMIN","MEMBER"); // ROLE_ADMIN
auth.inMemoryAuthentication()
.withUser("member")
.password("{noop}1234")
.roles("MEMBER"); // ROLE_MEMBER
}
}

 

 

로그인 페이지 커스트마이징

  • 기본적으로 제공되는 localhost:8080/login 대신 새로운 로그인 페이지 운영
  • loginPage는 GET 요청 → 개발자가 직접 처리해야함

 

 

 

CSRF(Cross Site Request Forgery) 공격

  • 인터넷 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격
  • POST 요청을 위조하여 전송하는 것
  • 방어책: CSFR 토큰 운영 !

security/login.jsp

  • action='/security/login' 
<body>
<h1>login</h1>
  <form name='f' action='/security/login' method='POST'>
  <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
  <table>

 

로그아웃 설정

  • 세션 무효화(invalidate)
  • 쿠키 제거: JSSESION-ID, remember-me

logout url을 post로 요청 !! → csrf 토큰이 있어야 로그인 처리가 가능하다 !!

 

PasswordEncorder 인터페이스

  • 비밀번호는 반드시 암호화해서 처리해야 함
  • 암호화는 단방향 해시함수임
    • 해킹당할 수 있으니깐
    • 그래서 비밀번호 잃어버렸을때 재발급!! (알려달라가 아닌)
메서드 설명
String encode(String rawPassword) 암호화되지 않는 비밀번호를 암호화해서 리턴함
같은 값을 암호화해도 매번 다른 값을 리턴
equals()로 비교할 수 없음
boolean matches(
    String rawPassword
    String encodedPassword
)
사용자가 입력한 암호화되지 않은 비밀번호와 암호화된 비밀번호가 일치하는지 검사
같으면 true, 다르면 false 리턴

 

config/SecurityConfig.java

  • Bean의 위치는 상관없음
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}

 

 

 


 

해당 기능으로 해보고 싶은 건

나만의 사이트를 만들어서 →

로그인 기능을 구현하고 →

응원 및 댓글 방명록을 남길 수 있도록 해보고싶다 ..

 

스스로 해보는 게 목표 ..!

 

 

 

 

 

 

'KB IT's Your Life > 교육' 카테고리의 다른 글

[072] API 로그인 및 사용자 인증  (0) 2024.08.22
[071] JWT, Api Server Security  (0) 2024.08.21
[069] Rest API  (0) 2024.08.19
[068] REST API  (2) 2024.08.14
[067] Spring 화면 처리 - BoardController  (0) 2024.08.13