본문 바로가기
✨ Back-end/Spring-Boot

[Spring] 쇼핑몰 - 52 Security 사용해 로그인하기 -2

by 환풍 2023. 4. 25.
728x90

 

 

로그인을 여러번 실패하면 

header.js

init()에 있는 로그인 실패시 추가되는 태그에서 로그인 함수에 있는 붙여넣어 주었다.

init()함수는 가장 먼저 실행되는 함수이다.

그럼 몇번을 실패해도 로그인 정보를 확인하세요는 한번만 출력된다.

 

로그인에 성공하여 관리자 페이지로 왔다. 하지만 오른쪽 상단에 로그인 한지 안한지 표식이 뜨지 않는다.

MemberController 컨트롤러

이제 컨트롤러에서 session을 받아 데이터를 삭제하는 것은 필요없으니 지워준다.

SecurityConfig

SecurityConfig에서 로그아웃시 session을 지워주며, Url과 로그아웃 성공시 인덱스 컨트롤러에 있는 "/"로 가게 해두었다.

header.html

원래 있던 session 로그인 부분을 빨간색 밑줄 부분처럼 sec로 바꿔주며, sec를 쓰기 위해 xmlns을 한줄 추가해주었다.

authentication.name 이지만, id를 출력해준다. 

로그인 했을 때 성공적으로 memId 값이 뜨게 된다.

이제 모든 컨트롤러에서 session을 제거하고, authentication 값을 채워넣어주자.

BuyController 컨트롤러

왼쪽 코드를 오른쪽과 같이 바꾸었다.

왼쪽 코드를 오른쪽과 같이 바꾸었다.

왼쪽 코드를 오른쪽과 같이 바꾸었다.

CartController 

왼쪽 코드를 오른쪽과 같이 바꾸었다. (틀릴 수 있으니, 다시 확인해보자)

 

여기까지 했다면, 어느 페이지로 가든, 이제 session 값 대신해서 인증된 memId값으로 환영합니다 문구가 뜬다.

단, 오류가 한가지있다.

이렇게 일반사용자도 관리자 계정으로 URL을 통해 바로 접근이 가능하다.

SecurityConfig

SecurityConfig에서 requestMatchers에 admin 컨트롤러의 cateManage 경로를 ADMIN 만 올 수 있도록 설정했다.

그러면 일반 User 사용자는 해당 Url로 갈 때, 요론 에러 페이지가 뜨게 될 것이다.

정상적으로 작동되는 것이지만, 제 3자가 볼때  이 화면은 제대로 된 코딩이 되지 않은 것 처럼 보이니 수정하자.

SecurityConfig

SecurityConfig에서 and()를 써서 엑세스가 거부되는 페이지 경로를 설정해주자.

IndexController 컨트롤러

만약 사용자가 관리자 url로 접속해서 엑세스 거부현상이 일어나면 경로를 "/"로 해주었기 때문에,

이 인덱스 컨트롤러로 오게될 것이다. 따라서 인덱스 컨트롤러에서 accessDeny로 컨트롤러를 받아와

access_deny.html로 페이지를 넘겨준다.

 

이제 사용자가 강제로 관리자 url을 쳐서 들어가도 화이트박스 에러가 안뜨고, 개발자가 지정한 화면이 뜨게된다.

SecurityConfig

마지막으로 다시 SecurityConfig로 돌아와서 admin에 대한 경로 모두 *로 설정해준다.

/admin/* 은 

1. /admin/manage O

2. /admin/item/manage X

 

/admin/**은

1. /admin/item/ manage O  

 

즉, *은 admin뒤에 경로가 여러개 들어오면 사용할 수 없다.

또 ,
.requestMatchers("/admin/**").hasAnyRole("ADMIN" , "MANAGER") 
 얘는 둘중에 하나라도 권한을 갖고있으면 접근 가능

 

header.html

header.html에서 우리는 항상 session 값으로 loginInfo 데이터를 받아 화면을 출력했는데,

이제 인증된 데이터를 받기 때문에 이를 오른쪽과 같이 바꿔주었다.

정상적으로 메뉴 화면도 잘 뜨는 것을 확인해볼 수 있다.

다음 포스팅에서는 주문관리에 주문 상태 정보에 대해서 알아보자.

 

반응형

댓글