관리자 페이지 예시
case1.
http://admin.fastlms.co.kr
http://backoffice.fastlms.co.kr
case2.
https://www.fastlms.co.kr/admin/
https://www.fastlms.co.kr/cms/
https://www.fastlms.co.kr/backoffice/
관리자 메인 페이지 구현
- 관리자 메인 컨트롤러 클래스 생성
- 관리자 메인 페이지 맵핑
package com.zerobase.fastlms.admin;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class AdminMainController {
@GetMapping("/admin/main.do")
public String main() {
return "admin/main";
}
}
- 관리자 화면 html 템플릿 파일 작성
- 관리자 메인 화면 접근 테스트
- 관리자 화면 링크 추가
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title> 관리자 화면 </title>
</head>
<body>
<h1>관리자 메인 화면</h1>
<!--<div th:replace="/fragments/layout.html :: fragment-body-menu"></div>-->
<div>
<a href="/admin/main.do"> 관리자 메인 </a>
|
<a href="/admin/member/list.do"> 회원 관리 </a>
|
<a href="#"> 카테고리 관리 </a>
|
<a href="#"> 강의 관리 </a>
|
<a href="/member/logout"> 로그아웃 </a>
<br/>
</div>
</body>
</html>
- 추가된 링크 확인
관리자 회원 관리 페이지 구현
- 관리자 회원 컨트롤러 생성
- 회원 관리 페이지 맵핑
package com.zerobase.fastlms.admin;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class AdminMemberController {
@GetMapping("/admin/member/list.do")
public String list() {
return "admin/member/list";
}
}
- 링크 추가
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title> 관리자 화면 </title>
</head>
<body>
<h1>관리자 회원 관리</h1>
<!--<div th:replace="/fragments/layout.html :: fragment-body-menu"></div>-->
<div>
<a href="/admin/main.do"> 관리자 메인 </a>
|
<a href="/admin/member/list.do"> 회원 관리 </a>
|
<a href="#"> 카테고리 관리 </a>
|
<a href="#"> 강의 관리 </a>
|
<a href="/member/logout"> 로그아웃 </a>
<br/>
</div>
</body>
</html>
- 관리자 메인 화면 페이지
- 관리자 회원 관리 페이지
관리자 권한 구현
case 1 관리자 여부를 지정할 것인가?
case 2 회원에 따른 ROLE을 지정할 것인가?
2-(1) 준회원, 정회원, 특별회원, 관리자
ROLE_SEMI_USER, ROLE_USER, ROLE_SPECIAL_USER, ROLE_ADMIN
2-(2) 준회원, 정회원, 특별회원
관리자 여부 별도
- 관리자 여부를 지정할 수 있는 Member Entity 추가
- private boolean adminYn
- DB에 추가된 모습
- 신규 계정 가입
- 가입 결과 가입 완료
- 추가된 계정 확인
- 계정 비활성화 상태
- 이메일을 통한 계정 활성화
- 계정 활성화 완료
- 계정 로그인
- 관리자 롤 추가
if (member.isAdminYn()) {
grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
}
- 관리자 페이지 집근인가에 관리자 롤 지정
http.authorizeRequests()
.antMatchers("/admin/**")
.hasAnyAuthority("ROLE_ADMIN");
관리자 권한 접근 테스트
- 일반 계정 로그인
- 관리자 페이지 접근 불가
- 관리자 계정 로그인
- 관리자 페이지 접근 가능
관리자 페이지 접근 에러 페이지 구현
- 접근거부 페이지 지정
http.exceptionHandling()
.accessDeniedPage("/error/denied");
- 접근거부 페이지 맵핑
@RequiredArgsConstructor
@Controller
public class MainController {
private final MailComponents mailComponents;
@RequestMapping("/")
public String index() {
return "index";
}
@RequestMapping("/error/denied")
public String errorDenied() {
return "error/denied";
}
}
- 접근거부 페이지 생성
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title> 에러 페이지 </title>
</head>
<body>
<h1>에러 페이지</h1>
<div th:replace="/fragments/layout.html :: fragment-body-menu"></div>
<p>접근 권한이 없습니다.</p>
<div>
<a href="/">홈으로 이동</a>
</div>
</body>
</html>
- 일반계정으로 접근 거부페이지 접근
- 에러 페이지 노출 확인
'cs > java-spring-boot' 카테고리의 다른 글
[Zero-base] 7-3. MyBatis 설정 및 쿼리 구현 (0) | 2022.02.24 |
---|---|
[Zero-base] 7-2. 회원 목록 구현 (0) | 2022.02.23 |
[Zero-base] 6-14. 비밀번호 초기화 요청 및 메일 링크를 통한 초기화 (0) | 2022.02.18 |
[Zero-base] 6-13. 스프링 시큐리티를 이용한 로그인&로그아웃 구현 (0) | 2022.02.17 |
[Zero-base] 6-12. 전송된 메일을 통한 계정 활성화 구현 (0) | 2022.02.16 |