목차
- 쿼리문 수정
- 인증과 권한
- principal
- session
- update
Update
password를 노출하지 않기 위해서 Query문을 수정합시다.
(시큐리티)
*
Tips
인증이 되어야 한다
본인이 쓴 것
권한
인증, 권한
Authfication
특정 방에 들어가는 것 권한
authrization
*
아래와 같이 바꾸게 되면
오류가 뜹니다
아마도, column값들을 모두 받아야 하나 봅니다.
그래서 다음과 같이 수정합니다.
password를 null값으로 넣은 채 session에 setAttribute로 담아줍니다.
세션에 담긴 Entity값을 우리는 principal이라고 통용해서 부릅니다.
* principal은 인증과 권한을 마친 주요한 사용자 값 *
또 다른 방법으로는
password를 null값으로 받아오는 방법입니다.
null as password라고 써도 되지만
as를 생략하고 사용해도 됩니다.
null password라고 쓰면 null값이 password에 들어가게 됩니다.
우리가 password에 null값을 넣고 가져오는 것은 시큐리티를 위해서입니다.
SELECT를 password를 제외하고 하는 것이죠.
이렇게 하면 mLogin으로 가져오는 값은 id, username, address, email, password 지만
password는 null값이 설정되면서 가져오게 됩니다.
가져온 값들은 userEntity에 저장되어
아래처럼 userEntity값이 들어있으면
이 값들을 principal이라는 이름으로 세션에 값을 넣어줍니다.
이렇게 들어간 세션 값(principal)은 아래에 인증과 권한에서 유용하게 쓰이게 됩니다.
객체 형태이지만 EL표현식을 쓰면 parsing 할 때 getter가 호출이 되어서 기본 변수명을 써도 됩니다.
즉, 기본 변수명만 써도 parsing 하면서 getter를 호출하여 객체에 있는 username을 가지고 오게 됩니다.
Entity - table, 개체라는 뜻
EL표현식에서 ""사이에 어떤 공백도 남기지 않습니다.
그리고 {} 사이에도 공백을 남기면 안 됩니다.
우리가 회원정보 수정 구현을 위해서 로그인한 사람의 인증을 한 후에
그 사람이 맞다면 그 사람의 정보를 수정할 수 있게 권한을 주어야 합니다.
이렇게 하면 번거로운데,
아까 위에 password 값에 null값을 넣어준 채로
저장해둔 principal을 사용하게 되면
이미 로그인을 한 상태이기 때문에 세션에 principal 이 존재하는 상태입니다.
이를 구현하기 위해 아래처럼 url을 구성해두면 번거롭게 인증과 권한을 또 검사 안 해도 되는 것입니다.
principal로 세션에 담은 것을 바로 받아옵니다.
또 이와 같이 하는 이유는 userEntity로 구현하게 되면,
인증을 통과한 사람이 다른 사람의 url을 타고 들어갈 수 도 있기 때문입니다.
즉, 세션을 사용하면 그 세션에 맞는 사람만 접근 가능하게 걸어두는 것입니다.
*
불법적으로 직접적으로 url 접근하는 경우가 있다.
(왜냐하면) ui로 접근할 수 없는데 접근했기 때문이다.
*
*
꿀팁으로 redirect로 뒤로 가게 해야 한다.
안 그러면 코드가 꼬임
*
위와 아래의 인증과 권한 코드는 계속해서 반복되는 경우가 있습니다.
이런 것들을 통칭해서 공통 관심사라고 합니다.
// 공통 관심사
-> 목적은 아니지만 정말 필요한 것들
-> 목적을 이루기 위해서 부가적인 것들
-> 한 군데서만 쓰이지 않음
-> 공통적으로 여러 곳에서 쓰임
**
Tips
핵심을 위해서 모든 컨트롤러마다 함수들이 필요함
--> AOP라는 개념이 나옴
스프링의 핵심
1. IOC, DI
2. AOP(공통 관심사 분리)
AOP
Aspect Oriented Programming
관점 지향 프로그래밍
-> 공통 관심사를 분리
**
인증과 권한 코드를 더 다듬어 줍니다.
모든 경우에 대해서 return 값이 있어야 합니다.
그렇지 않으면 위 사진처럼 오류가 뜹니다.
return을 다 설정해줍니다.
가독성을 높인 코드는 아래에
위와 같이 코드를 작성하고 실행합니다.
이렇게 하면 회원정보가 수정되어 저장됩니다.
다만,
회원정보 수정을 하고 나서 다시 회원정보를 수정을 누르게 되면
아까 입력했던 주소가 들어오지 않은 상태로 있습니다.
그 이유는 바로 세션이 예전 세션 상태여서 그런데요.
이런 상태에서는 아래와 같이 코드를 작성해서 새롭게 세션을 가져와야 합니다.
즉 update 된 상태로 새로운 세션을 가져오지 않으면 예전의 세션 상태 그대로이기 때문에
위와 같이 주소창에 뜨지 않게 됩니다.
두 가지의 방법이 있습니다.
아래는 제가 생각해낸 방법이고
밑에는 최적화된 답안입니다.
인증과 권한을 체크하고 동시에 새로운 세션에 담아 버립니다.
바로 세션을 덮어 씌우는 방법으로 예전 세션을 update를 해줍니다.
-> 이런 것은 HashMap데이터로 되어있는데 Key값으로 적용이 됩니다.
'BackEnd > Spring' 카테고리의 다른 글
[Spring][17]Page Update, Delete[게시글 수정,삭제 구현] (0) | 2021.07.16 |
---|---|
[Spring][16]Main Page[메인페이지, 상세페이지 구현] (0) | 2021.07.14 |
[Spring][14]API Practice2[Address API 구현코드, Debug] (0) | 2021.07.12 |
[Spring][13]API Practice[API 실습, test] (0) | 2021.07.11 |
[Spring][12]API 활용하기 (0) | 2021.07.10 |