springboot - blog project (52)

Yuri Lee·2020년 9월 1일
0

springboot - blog project

목록 보기
27/49

스프링부트 강좌 52강(블로그 프로젝트) - 스프링 시큐리티 로그인

추후보충 필요!!!!

<%@ page language="java" contentType="text/html; charset=EUC-KR"
	pageEncoding="EUC-KR"%>

<%@ include file="../layout/header.jsp"%>

<div class="container">
	<form action="/auth/loginProc" method="post">
		<div class="form-group">
			<label for="username">Username:</label> 
			<input type="text" name="username" class="form-control" placeholder="Enter username" id="username">
		</div>
		
		<div class="form-group">
			<label for="pwd">Password:</label> 
			<input type="password" name="password" class="form-control" placeholder="Enter password" id="password">
		</div>
		<button id="btn-login" class="btn btn-primary">login</button>
	</form>
</div>

<%@ include file="../layout/footer.jsp"%>

username 과 password의 값을 갖고 "/auth/loginProc" 로 이동한다.

현재 프로젝트 내에서 UserApiController.java 안에는 /auth/joinProc 만 존재한다.

우리는 loginProc를 만들지 않을 것이다. 스프링 시큐리티가 가로채기 하기 위해서이다.

[이해가 잘 안됨.....]
UserDetail Type 의 유저 오브젝트를 만들어야 한다. 얘가 로그인 요청을 하고 세션에 딱 등록을 해주는데 그때 유저 오브젝트를 등록할 수는 없기 때문이다. 타입이 안맞기 때문에.. 타입은 유저 디테일즈 타입이어야 한다.

UserDetails가 추상 메서드를 들고 있는데 이것들을 다 오버라이딩 해야 한다.

Alt + Shift + s -> override methods

자바는 오브젝트를 담을 수 있지만 메서드는 넘길 수 없다. 자바 1.8부터는..

얘는 메서드를 무조건 하나밖에 들고 있지 않다. 그래서 람다식으로 표현을 하면..
어떤 식으로 표현할 수 있을까?..

그 다음에 ...

시큐리티 config에서 이걸 좀 알려줘야 한다.

	// 시큐리티가 대신 로그인 해주는데 password를 가로채기를 하는데
	// 해당 password가 뭘로 해쉬가 되어 회원가입이 되었는지 알아야 
	// 같은 해쉬로 암호화해서 DB에 있는 해쉬랑 비교할 수 있음. 
	
	@Override
	protected void configure(AuthenticationManagerBuilder auth) throws Exception {
		auth.userDetailsService(null).passwordEncoder(encodePWD());
		
	}

null 자리에 있는 오브젝트에게 알려줘야 한다. 이걸 아직 만들지 않았음. 만들러 가보자.

package com.yuri.blog.config.auth;

public class PrincipalDetailService {

}

이게 타입이 UserDetailsService가 되어야 한다.

loadUserByUsername 를 오버라이딩 해준다.

스프링이 로그인 요청을 가로챌 때, username, password 변수 2개를 가로채는데 password 부분 처리는 알아서 한다. 해당 username이 db에 있는지만 확인해주면 된다. -> loadUserByUsername가 그 역할을 함

이제 로그인을 할때 loadUserByUsername 이 함수가 자동으로 실행되면서 findByUsername

오버라이딩해서 이렇게 만들지 않으면 우리가 들고있는 user 정보를 담아놓을 수 없다 ?! 그래서 꼭 만들어줘야 한다. 그래야 유저 정보를...

아이디는 user, 패스워드는 콘솔창..?

우리가 회원가입하고, 회원가입한 정보를 갖고 세션에 넣고..

-이 글은 유투버 겟인데어의 스프링 부트 강좌를 바탕으로 정리한 내용입니다.-

profile
Step by step goes a long way ✨

0개의 댓글