본문 바로가기

프로젝트/게시판 프로젝트12

[기능구현#4] 예외처리 예외처리 흐름도기본적인 Exception 흐름도Controller에서 Exception 발생Tomcat으로 전달에러 코드 별로, 지정된 Mapping으로 다시 Controller로 전달전달된 페이지를 View 예외처리 방법1. Exception을 직접 구현하여, mapping Controller로 진행2. Spring이 자동으로, 에러코드별 html이 있다면 해당 html로 view 진행3. API형식일 경우, json 형태로 (혹은 다른 방식으로) 에러 코드 및 메시지 전달현재 프로젝트에 적용되어 있는 Exception 방식1번 방법으로, Exception을 직접 구현하여 원하는 Html로 맵핑 작업  예외처리 구현WebServerFactoryCustomizer를 통한 구현 (@Override cust.. 2024. 11. 20.
[기능구현#3] 로그인 기능 로그인 서비스 흐름도로그인 인증)- 로그인 인증의 경우, Filter와 Interceptor를 이용하여 구현할 수 있다- Filter의 경우, spring의 Distpatcher에 들어가기 전에 필터링이 가능하므로 주로 Filter에서 로그인 인증이 일어난다현재 프로젝트 적용1차 로그인 인증 (Filter)Session값의 유무를 통해, Session을 가지고 있으면 Filter 통과2차 로그인 인증 (Interceptor)Session 값 유무 판단 + URL 변경을 통한 사용자 인증을 막고자 정규표현식을 이용한 필터링 진행ex) http://localhost/members/test1 -> http://localhost/members/admin (이동 방지) 로그인 인증 방법1) JWT2) Sessio.. 2024. 11. 20.
[트러블 슈팅] 로그인 인증 관련 문제 문제로그인을 했을경우, 이미 인증을 받았기에 필터와 인터셉트가 걸러주지 못하는 문제 발견/members/test -> /members/admin (이동 가능) 문제의 코드session의 null 체크만 하고, 로그인 계정에 대한 인증 로직이 추가되지 않음위의 문제가 발생한 원인 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String requestURI = request.getRequestURI(); Pattern pattern = Pattern.compile("/members/([^/]+)".. 2024. 10. 29.
[트러블 슈팅]정상적인 update() 불가 (@InitBinder) @InitBinder@PostConstruct@InitBinder입력 데이터 바인딩을 담당하기 위한 메서드컨트롤러 요청에 따라서, 해당 부분도 같이 호출됨update로직은 제대로 동작하나, 새로운 url로 맵핑되었을때 @InitBinder도 동작을하여 이전의 값이 그대로 나오는 문제 발생@InitBinder private void init(WebDataBinder webDataBinder){ Member member1 = new Member("admin","admin","admin","admin"); Member member2 = new Member("test","test","test","seoul"); Member member3 = new Member(.. 2024. 10. 23.
[기능구현#2] 스프링 검증 어노테이션 생성 (Spring bean validation) 1. 스프링 어노테이션 만들기2. 검증 관련 어노테이션 클래스 구현3. 패스워드 유효성 검사 예제 스프링 어노테이션 만들기@Constraintvalidation을 하기위한 구현체 연결 어노테이션@Target어노테이션을 사용할 곳default 값은 모든 대상Type 종류 타입설명ElementType.FIELD필드ElementType.METHOD함수ElementType.PARAMETER파라미터ElementType.CONSTRUCTOR생성자ElementType.LOCAL_VARIABLE지역변수ElementType.PACAGE패키지ElementType.ANNOTAION_TYPE다른 어노테이션@RETENTION어노테이션의 지속 시간종류타입설명RetentionPolicy.SOURCE컴파일 후에 해당 어노테이션이 사.. 2024. 10. 23.
[기능구현#1] 패스워드 검증 추가하기 1. 직접 검증2. BindingResult3. 애노테이션 사용 직접검증HashMap을 이용하여, error를 담고 ModelAttribute로 반환thymeleaf의 조건문과 삼항문을 이용하여, error 인 경우와 정상인경우 렌더링//[Controller] Map errors = new HashMap(); if ( member.getPasswd() != null && member.getPasswd().length() >= 8 ){ if (member.getPasswd().matches("[a-zA-Z]+")){ errors.put("passwd", "비밀번호는 숫자와 특수문자를 포함해야합니다."); }.. 2024. 10. 23.