[Spring][8]Login Practice[로그인 실습]
BackEnd/Spring

[Spring][8]Login Practice[로그인 실습]

목차

- post

- 로그인 기능 구현

- 글쓰기 구현

- 포린 키


Post

 

post를 쓰자

 

*

post를 써야 하는 이유

인증을 해야 하기 때문에 무조건 post로 넘겨야 한다.! *그래야 안전함!*

그래도 안전하지 않음, ( http에서 body에 전부 노출됨 )

get은 쿼리여서 String 암호화 불가능

post는 암호화가 가능

get, post 둘 다 하던 노출은 됨

*

 

그렇기 때문에 서비스를 할 때는 https를 써야 한다 (security 추가)

https를 쓰지 않으면 결제 서비스도 불가능해진다. 민감한 정보를 암호화/ 복호화된 상태로 보내야 하기 때문

 

https를 쓰기 위해서는

값을 지불하고 도메인 등록https 서비스 회사에 등록해주면 된다.

그렇게 하면 ip로 도메인으로 넘어갈 때 ip -> 도메인 서버 -> security 서버 -> 도착

이렇게 통신하게 되어서 안전해진다.

 

https 서비스 회사에서는 정보를 암호화 복호화를 진행해서 개인 서버 운영자도 그 테이블 값을 확인할 수 없다(원본 값) 즉, 암호화된 키가 테이블 값에 담기게 된다. 

 

여기서 중요한 건, post로 보내면 암호화/ 복호화가능하지만 get으로 url로 보내면 암호화/ 복호화 불가능합니다.

그래서, 우리는 postaction을 모두 설정을 해둬야 합니다.

 

required와 끝에 닫히는 태그

 

 

로그인 기능 구현을 위해 UserController Session DI 합니다.

왜냐하면 Session에 사용자의 정보를 담아서 보내줘야 하기 때문입니다.

 

 

의존성 주입

 

그리고 userRepositorymLogin으로 구현했던 것을 활용하여 데이터를 비교하기 위해서 DB에서 담아옵니다.

담아 온 것이 맞다면 userEntityUser 정보가 객체 형태로 담아져서 받게 됩니다. 

 

그렇지 않다면 null값을 반환을 합니다.

(사용자가 입력한 값이 DB에 있지 않아서 null값을 반환할 수 없었던 것)

 

login 구현

 

Principal - 인증자(접근 주체)

 


 

Jstl

 

기존의 <% %> 태그는 톰켓이 해석해서 던져줬지만 jstl의 경우에는 톰켓이 해석하지 못하기 때문에 taglib를 추가를 해서 jstl을 사용할 수 있게 합니다.

 

 

taglib 추가

 

 

taglib의 원본 출처

https://downloads.apache.org/tomcat/taglibs/taglibs-standard-1.2.5/README_bin.txt

 

 

첫번째의 Core Library를 추가

 

test는 아무의미없음, 안에 조건문을 넣으면된다.

 

 

whenif로, otherwiseelse처럼 사용하면 됩니다.

 

 

주소설계 유의하자

 

 

auth의 경우인증이 필요한 화면에 이동할 때

인증이 필요하다고 느껴지면 경로에 넣어주며

 

user는 사용자의 정보가 session에 저장이 되어있고

session에 저장되어 있는 상태인 그 사용자의 정보를 가지고 수정하거나

로그아웃할 때 user 사용자의 session을 사용하기 때문에

user경로를 추가해줍니다. 

 

 

auth/....

user/....

분리

 

 

Controller 안에서

@ResponseBody를 자료형 앞에 쓰면 그 함수만 RestController가 됨

 

 

ResponseBody 추가된 모습

 

분명 Controller다

 

 

history.back();

을 사용해서 console 창에서 로그인을 실패했을 때 alert를 보여준 다음에 사용자가 아이디를 다시 입력하지 않도록 script언어인 history.back(); 을 사용해서 구현합니다.

 

 

script 태그를 사용

 

 

Script 태그를 사용해서 표현하는데 alert를 띄울 때마다 이렇게 일일이 닿으면 불편합니다.

그래서 새로운 package를 만들고 거기에 Script 함수를 모아둡시다. 

 

 

util package 생성

 

Script Class 생성

 

msg 로 값 리턴

 

 

이렇게 해주면 아래처럼 한 줄의 코드를 치면 끝납니다.

 

Script.back안에

String 매개변수의 msg로 "로그인 실패"를 넣어줍니다.

 

 

"로그인 실패" alert 창이 뜨게 됨

 

 

위에처럼 로그인 성공을 했을 때에도 기존의 redirect:"/" 방식으로 하면 String으로 return 되기 때문에

기존의 방식을 바꿔 주기 위해 JavaScript를 사용해서 구현을 하여

"로그인 실패"처럼 편하게 함수를 만들어 줍니다.

 

 

href함수 String uri를 받는다

 

back함수에는 scrpit 문인 location.href=""를 사용해서 안에 이동하고 싶은 주소를 입력합니다.

 

 

아래 "/" -> index 로 넘어가게 구성한다

 

로그인 창에 잘못 입력하면 아래와 같이 구현됩니다.

 

 

구현되는 모습

 

 


글쓰기 구현

 

 

Post 클래스를 만들고 (새로운 데이터를 저장하기 위해서 ) 다음과 같이 설정합니다.

 

@Loblongtypetext 데이터 type 형태입니다.

 

 

Post 클래스로 DB테이블을 만들자

 

userId 추가

 

userId 추가를 해주고 나서

getter, setter 추가를 해줘야 합니다, 그렇게 해야 DB Spring에 접근할 수 있기 때문입니다.

 

 

create

 

yml 설정을 변경하고 실행해보면 

 

 

DB에 테이블이 만들어진 모습

 

DB에 테이블이 만들어집니다

 

none으로 변경

 

DB 테이블을 만들고 none으로 설정을 바꿔 줘야 합니다.

그렇지 않으면 서버를 실행할 때마다 DB를 초기화해서 생성하기 때문입니다.

 

그리고 회원가입으로 DB에 세명의 데이터를 넣고 실습해보자.

그전에 가입했던 DB가 다 날아가서 다시 만들어 줘야 합니다. 

 

 

회원가입 해주자

 

 

아래와 같이 회원가입으로 데이터를 넣어 줍니다.

 

 

3명의 데이터, 잘들어 있는 모습

 

쿼리문을 다음과 같이 작성합니다.

 

쿼리문 작성

 

현재 쿼리문 실행으로 한 문장 씩 실행해본다. 그렇게 하면 어디서 오류가 나는지 알 수 있다. 

(전체 쿼리문으로 실행하면 오류가 어디서 터졌는지 알기 어려움)

 

 

잘들어 있는 모습

 


포린 키에 대해서

 

다음과 같이 4가지 관계가 있습니다.

 

1 : N 관계와

N : 1 관계

 

N : N 관계

1 : 1 관계

 

one to many

one to one

many to one

many to many

 

마치 영화 예매를 할 때

영화를 보는 사람의 정보 테이블과

영화의 상영정보 테이블을 보면

N:N 관계입니다.

 

이렇게 되면 테이블을 여러 테이블로 쪼개야 합니다.

1:N이 될 때까지 말입니다.

그렇게 해야 DB설계 원칙인 무결성의 원칙을 지킬 수 있기 때문입니다.

 

 

Tips

N에 포린 키(foregin key-외래 키)를 생성합니다.

 


Reference

 

https://daesuni.github.io/jstl/

 

JSTL의 기본 개념과 사용방법 정리

1. JSTL이란?

daesuni.github.io

 

https://downloads.apache.org/tomcat/taglibs/taglibs-standard-1.2.5/README_bin.txt