본문 바로가기
study/Spring

[Spring] 24. Spring (관리자권한설정[AdminController.java, AdminLoginAspect.java])

by 금이패런츠 2022. 5. 12.
728x90
반응형

AdminController.java

package controller;

import java.util.Collections;
import java.util.List;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import logic.ShopService;
import logic.User;
/*
 * AdminController의 모든 메서드들은 반드시 관리자로 로그인 해야 실행되도록 AOP 설정해야 함.
 * 		=> AdminLoginAspect 클래스 생성
 * 1. 로그아웃 : 로그인하세요. login 페이지로 이동
 * 2. 관리자가 아닌 경우 : 관리자만 거래 가능합니다. main 페이지로 이동
 */
@Controller
@RequestMapping("admin")
public class AdminController {
	@Autowired
	private ShopService service;
	
	@RequestMapping("list")
	public ModelAndView list(Integer sort, HttpSession session) {
		ModelAndView mav = new ModelAndView();
		List<User> list = service.userlist(); //회원목록을 db에서 조회
		//id, name 오름차순 정렬설정
		if (sort == null) sort = 0;
		switch(sort) {
		case 1 : Collections.sort(list,(u1,u2)->u1.getUserid().compareTo(u2.getUserid()));
		break;
		case 2 : Collections.sort(list,(u1,u2)->u2.getUserid().compareTo(u1.getUserid()));
		break;
		case 3 : Collections.sort(list,(u1,u2)->u1.getUsername().compareTo(u2.getUsername()));
		break;
		case 4 : Collections.sort(list,(u1,u2)->u2.getUsername().compareTo(u1.getUsername()));
		break;
		}
		mav.addObject("list",list);
		return mav;
	}
}

AdminLoginAspect.java

package aop;

import javax.servlet.http.HttpSession;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

import exception.LoginException;
import logic.User;

@Component	//객체화
@Aspect		//AOP 클래스로 사용함
public class AdminLoginAspect {
	@Around("execution(* controller.Admin*.*(..)) && args(..,session)")
	public Object adminCheck(ProceedingJoinPoint joinPoint, HttpSession session) throws Throwable {
		User loginUser = (User)session.getAttribute("loginUser");
		if(loginUser ==  null) { //로그인이 안된 상태
			throw new LoginException("[adminCheck]로그인 후 거래하세요", "../user/login");
		} else if (!loginUser.getUserid().equals("admin")) {
			throw new LoginException("[adminCheck]관리자만 거래 가능합니다.", "../user/main");
		}
		return joinPoint.proceed(); //다음 메서드 호출
	}
}
728x90
반응형