Spring

부트캠프82-1일차 ( spring에서의 예외처리)

동곤일상 2025. 6. 7. 15:53
반응형

1) 스프링에서의 예외처리

@RequestMapping("mypage")
	public ModelAndView idCheckMypage(String userid, HttpSession session) {
		ModelAndView mav = new ModelAndView();
		//아이디를이용해 객체를 뽑음
		User user = service.selectUser(userid);
		mav.addObject("user",user);
		return mav;
	}

해당코드는 mypage로 넘어갈때의 컨트롤러이다.
상식적으로 로그인을 안하고 개인정보에 접근하거나
, 남의 개인정보를 볼수 있으면 안되잖아요?
 
그래서 예외처리를 이용해 막아놓을 예정
 
 

1-1). Exception객체 생성

package exception;

import lombok.Getter;

@Getter
public class ShopException extends RuntimeException{
	private String url;
	
	public ShopException(String msg,String url) {
		super(msg);
		this.url = url;
	}
	

}

 

1-2) AOP 사용

aop.UserLoginAspect.java

package aop;


/*
 *  1. poincut : UserController.idCheck* 메서드로시작
 *  		마지막 매개변수가 String,HtppSession인 메서드
 */
@Component
@Aspect //AOP를 사용하겠다는ㄷ뜻
public class UserLoginAspect {
	//UserController에 idCheck로 시작하는 모든 메서드를 실행하기 전,후에 해당메서드호출
	@Around("execution(* controller.User*.idCheck*(..)) && args(..,userid,session)")
	public Object userIdCheck(ProceedingJoinPoint joinPoint,
			String userid,HttpSession session) throws Throwable{
		User loginUser = (User)session.getAttribute("loginUser");
		if(loginUser==null) {
			throw new ShopException("[idCheck]로그인 필요", "login");			
		}
		if(!loginUser.getUserid().equals("admin")
				&& !loginUser.getUserid().equals(userid)) {
			throw new ShopException("[idCheck]본인 정보만 거래가능", "../item/list");
		}
		return joinPoint.proceed();
	}

}

mypage를 매핑하는 메서드의 이름은 IdCheckMypage임!!!!

1.세션정보(login정보)가 없다면 login화면으로 이동시키고

2.남의정보로 로그인을 시도하거나 , 관리자가 아니라면 자신의 item/list로 이동시키는게 목적

 

1-3) MvcConfig

config.MvcConfig.java

@Bean
	public SimpleMappingExceptionResolver exceptionHandler() {
		SimpleMappingExceptionResolver ser = new SimpleMappingExceptionResolver();
		Properties pr = new Properties();
		//shopException 예외가발생하면 exception.jsp호출
		pr.put("exception.ShopException", "exception");
		ser.setExceptionMappings(pr);
		return ser;
	}

다음은 예외처리객체를 처리하는곳이다.
ShopException이 발생한다면 exception.jsp로 이동시켜줄것임
 

1-4) exception.jsp

사실상 페이지는 없고 로직만 처리하는곳이라고 보면 된다.
isErrorPage=true로 설정을 해둬서
ShopException객체가 전달하는 인자들을 받아옴.
get프로퍼티를 사용해
넘겨진 메시지를 띄운후 넘어온 url로 이동시켜준다

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true"%>
    <!-- isErrorPage="true" : ShopException객체가 전달 -->
<script type="text/javascript">
/*
 isErrorPage=:true설정으로인해 
 암묵적으로 객체이름을 exception으로 사용가능하게해줌 
 get프로퍼티로 인해 다음과같이 message,url을 사용가능하게 해
 */
alert("${exception.message}")
location.href="${exception.url}"
</script>

 

update라던지 delete라던지 본인만 사용해야하는 페이지들을 매핑하는 부분은

컨트롤러에서 메서드 이름만 idCheck로 시작한다면 다 적용이될것임!!!