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>