스프링부트 강좌 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, 패스워드는 콘솔창..?
우리가 회원가입하고, 회원가입한 정보를 갖고 세션에 넣고..
-이 글은 유투버 겟인데어의 스프링 부트 강좌를 바탕으로 정리한 내용입니다.-