반응형

관리자 페이지 예시

 

https://www.fastlms.co.kr →

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/

 

 


관리자 메인 페이지 구현

 

AdminMainController.java

  • 관리자 메인 컨트롤러 클래스 생성

 

 

 

AdminMainController.java

  • 관리자 메인 페이지 맵핑
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";
    }
}

 

 

 

main.html

  • 관리자 화면 html 템플릿 파일 작성

 

 

 

localhost:8080/admin/main

  • 관리자 메인 화면 접근 테스트

 

 

 

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>

 

 

 

localhost:8080/admin/main.do

  • 추가된 링크 확인

 

 


관리자 회원 관리 페이지 구현

 

AdminMemberController.java

  • 관리자 회원 컨트롤러 생성

 

 

 

AdminMemberController.java

  • 회원 관리 페이지 맵핑
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";
    }
}

 

 

 

AdminMemberController.java

  • 링크 추가
<!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>

 

 

 

localhost:8080/admin/main.do

  • 관리자 메인 화면 페이지

 

 

 

  • 관리자 회원 관리 페이지

 

 

 


관리자 권한 구현

 

case 1 관리자 여부를 지정할 것인가?
case 2 회원에 따른 ROLE을 지정할 것인가?
 2-(1) 준회원, 정회원, 특별회원, 관리자
  ROLE_SEMI_USER, ROLE_USER, ROLE_SPECIAL_USER, ROLE_ADMIN
 2-(2) 준회원, 정회원, 특별회원
  관리자 여부 별도

 

Member.java

  • 관리자 여부를 지정할 수 있는 Member Entity 추가
  • private boolean adminYn

 

 

 

Database

  • DB에 추가된 모습

 

 

 

  • 신규 계정 가입

 

 

 

  • 가입 결과 가입 완료

 

 

 

Member Table

  • 추가된 계정 확인
  • 계정 비활성화 상태

 

 

 

  • 이메일을 통한 계정 활성화

 

 

 

  • 계정 활성화 완료

 

 

 

  • 계정 로그인

 

 

 

MemberServiceImpl.java

  • 관리자 롤 추가
if (member.isAdminYn()) {
    grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
}

 

 

 

SercurityConfiguration.java

  •  관리자 페이지 집근인가에 관리자 롤 지정
http.authorizeRequests()
        .antMatchers("/admin/**")
        .hasAnyAuthority("ROLE_ADMIN");

 

 


관리자 권한 접근 테스트

 

  • 일반 계정 로그인

 

 

 

  • 관리자 페이지 접근 불가

 

 

 

  • 관리자 계정 로그인

 

 

 

  • 관리자 페이지 접근 가능

 

 


관리자 페이지 접근 에러 페이지 구현

 

SercurityConfiguration.java

  • 접근거부 페이지 지정
http.exceptionHandling()
        .accessDeniedPage("/error/denied");

 

 

 

MainController.java

  • 접근거부 페이지 맵핑
@RequiredArgsConstructor
@Controller
public class MainController {

    private final MailComponents mailComponents;

    @RequestMapping("/")
    public String index() {

        return "index";
    }

    @RequestMapping("/error/denied")
    public String errorDenied() {

        return "error/denied";
    }
}

 

 

 

denied.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>

    <p>접근 권한이 없습니다.</p>
    <div>
        <a href="/">홈으로 이동</a>
    </div>

</body>
</html>

 

 

 

  • 일반계정으로 접근 거부페이지 접근
  • 에러 페이지 노출 확인

 

 


반응형

+ Recent posts