마트철수
[070] Spring 로그인과 로그아웃 처리 본문
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 등) 얻을지 설정

- 두 명의 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 |