월 16,940원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 시큐리티와 필터 그리고 인터셉터 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 항상 강의 잘 보고 있습니다.서블릿 필터는 서블릿이 제공하는 기술이고,스프링 인터셉터는 스프링 MVC가 제공되는 기술이라고 설명하셨습니다.또한, 인터셉터는 스프링 MVC 구조에 특화된 필터 기능을 제공하고, 스프링 MVC를 사용하고, 특별히 필터를 꼭 사용해야 하는 상황이 아니라면 인터셉터를 사용하는 것이 더 편리하다고 말씀하셨습니다. 그리고 스프링 시큐리티는 필터들의 집합이라고 이해하고 있습니다. 그러면 실무에서는 스프링 시큐리티로 필터를 사용하고,인터셉터를 스프링 MVC에서 사용하는 등 함께 사용하나요?? 즉, "스프링의 시큐리티의 Filter는 Servlet Container에서 동작하여 모든 요청에 대해 실행되므로 보다 저수준의 작업을 처리하기에 적합" 하고,"스프링 MVC의 Interceptor는 주로 프레임워크나 비즈니스 로직에 특화된 작업을 처리할 때 사용되며, 스프링과 같은 프레임워크에서 제공하는 레벨에서 사용함"이라고 이해하면 되는건가요?? 강의를 보다 보면 인터셉터가 필터보다 더 유용하다고 느껴졌는데 실무에서는 어떻게 사용하는지 궁금합니다 ! 감사합니다
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
서블릿이 제공하는 HttpSession 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 스프링 부트 내에는 서블릿 컨테이너와 스프링 컨테이너가 있다고 알고 있습니다.또한, 서블릿 컨테이너는 스프링 컨테이너 외부에 존재하기 때문에 bean에 직접 접근할 수 없습니다.그리고 DB에 직접 접근하여 요청을 처리하는 것은 스프링 컨테이너 내에서 이루어집니다. 이때, 궁금한 점이 있습니다.1."서블릿이 제공하는 HttpSession"이라는 개념이 잘 이해가 안됩니다. 서블릿이 제공하는 HttpSession은 스프링 컨테이너에서 bean으로 등록되어 사용되는게 맞나요? 아니면 서블릿 컨테이너에서 관리하는 것이 HttpSession인가요? 서블릿 컨테이너, 톰캣, WAS 그리고 스프링 컨테이너에 대해서 고민하다 보니 HttpServletRequest가 헷갈립니다HttpServletRequest는 서블릿이 HTTP 요청 메시지를 파싱한 결과를 담은 객체인데 그러면 HttpServletRequest는 서블릿 컨테이너 안에 존재하는 서블릿이 스프링 컨테이너에게 넘겨주고, 스프링 컨테이너는 HttpServletRequest를 받아서 스프링 컨테이너 안에서 처리를 하는 건가요??아니면, 스프링 부트 내에는 서블릿 컨테이너가 있고 스프링 컨테이너가 존재하기 때문에 각각의 그냥 아래와 같이 작성하면 서블릿 컨테이너 내에 존재하는 HttpServletRequest 객체를 처리한 것인가요?설명 부탁드립니다. 감사합니다
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Session 객체는 thymeleaf에서 어떻게 사용하는건가요??
스프링 부트 3.0 부터는 ${#request} , ${#response} , ${#session} , ${#servletContext} 를 지원하지 않기 때문에 model에 담아서 뷰 템플릿으로 넘겨줘야 한다고 하셨는데이 코드상에는 session을 따로 model에 넘기는 부분이 안보여서요..@GetMapping("/basic-objects") public String basicObjects(Model model, HttpServletRequest request, HttpServletResponse response, HttpSession session) { session.setAttribute("sessionData", "Hello Session"); model.addAttribute("request", request); model.addAttribute("response", response); model.addAttribute("servletContext", request.getServletContext()); return "basic/basic-objects"; }코드 상에는 따로 model에 session 데이터를 넘겨주는 부분이 안보이는데basic-objects.html에서는 <li>session = <span th:text="${session}"></span></li> 이 코드에서처럼 ${session}을 변수 처럼 사용하더라구요.. 이렇게 할 수 있는 이유가 session은 thymeleaf에서 기본으로 제공하는 편의 객체여서 그런건가요?? 아니면 springMVC가 HttpSession session을 컨트롤러 메소드에서 파라미터로 받았기 때문에 자동으로 model에 넣어주기 때문에 그런건가요??비슷한 질문들을 확인해봤는데 잘 이해가 가지 않아서 질문 드립니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
문자가 깨지는거? 같은데 어떻게 해결해야 하나요??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.이렇게 뜨는데 처음에 전전회차 인가 떳을때는 폼 에서는 안뜨고 log에만 떠서 그냥 그러려니 했는데 이젠 폼에도 떠서 어떻게 해야 하는지 잘 모르겠네요... 아 파일 인코딩에도 확인해서 UTF-8로 바꾸긴 했는데 이렇게 뜨네여.. 도와 주세여... 아래는 구글 링크 입니다https://drive.google.com/file/d/1tOZw0KhI9S3OdJSbEcwdTxIkXKIol4WW/view?usp=sharing
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
잘못된 Gradle JVM 문제
프로젝트명을 validation-start에서 validation으로 변경 후 프로젝트를 생성하면 위와 같은 메세지가 나옵니다. 해결방법이 어떻게 되나요?
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
오류 페이지2 - application.properties 문제
환경Window10, intellij ultimate, Java17, spring boot 3.2.5application.properties- /error-ex상황스프링 부트의 application.properites 기본값으로 /error-ex에 GET 요청을 보냈을 때 위와 같은 결과를 얻을 수 있었습니다.위의 이미지에서 오류 페이지2의 1:37에서의 결과가 다른 것을 확인할 수 있었습니다. 명시적으로 아래와 같이 값을 지정해야 동일한 결과를 얻는데 왜 그런 것인지 알 수 없어 문의를 드립니다.server.error.include-exception=false server.error.include-message=never server.error.include-stacktrace=never server.error.include-binding-errors=never
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@GetMapping("variable")이라고 작성해도 되는 이유
실습시 BasicController에서 @GetMapping("/variable")@GetMapping("variable")둘 다 http://localhost:8080/basic/variable입력시 컨트롤러 호출이 되는것을 확인할 수 있었습니다. 왜 후자의 variable도 가능한건가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인 회원가입에서 더 붙이기
로그인 회원가입 로직만 떼어서, 디자인패턴을 1군데 이용해서 3클래스 이상 변화시킬라고 하는데요추가로 더 보완하는 느낌이에요이 패턴중에서 적용할만한 패턴과, 어디에 적용해야할지 가이드좀 잡아주실 수 있나요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
POST 컨트롤러를 수행한 뒤에도 현재 페이지를 보여주는 방법
POST 매핑 동작을 수행한 뒤에도 기존에 머물렀던 페이지로 리다이렉트 하는 방법이 있을까요?예를 들어, 로그아웃 버튼을 클릭한 뒤에도 기존 페이지를 보여주는 상황이 이에 해당됩니다.그렇다면 현재 페이지의 주소에 대한 정보를 컨트롤러에서 가지고 있어야 할텐데 어떤 방식으로 구현하는 것이 좋을지 궁금해서 질문 남깁니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HandlerExceptionResolver 활용 질문이 있습니다.
1.HandlerExceptionResolver 활용 8분 10초에서 40초사이 String result= objectMapper.writeValueAsString(errorResult); 이 구문에 대해서요.jason을 문자로 바꿔준다. 객체를 문자로 바꿔준다고 하셨느데요. 그래서 객체랑 jason이 같은 줄알았는데요.https://velog.io/@wong0220/%EA%B0%9D%EC%B2%B4-Object-%EC%99%80-JSON-%EC%B0%A8%EC%9D%B4 여기 링크보면 다르다고 하는데 이 링크가 틀린건가요?아니면 객체(jason)형태를 문자로 바꿔준다라는 의미로 이해해도 되나요?2.위 사진은 API 예외 처리 교재 8페이지 사진입니다. HandlerExceptionResolver 시작 강의코드에서는 위에사진 빨간색 표시된 곳에서 response.sendError가 나오는건가요? 즉 서블릿 컨테이너까지 에러가 갔다가 다시 재요청을 한 것이 (2,3,4번과정)이 맞나요?활용 강의에서는 (2,3,4,5번과정)이 맞나요? 근데 BasicErrorController로 재요청하는 방식은 몇 번에서 일어나는건가요? 이전 강의 코드package hello.exception.resolver; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; @Slf4j public class MyHandlerExceptionResolver implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { try { if (ex instanceof IllegalArgumentException) { log.info("IllegalArgumentException resolver to 400"); response.sendError(HttpServletResponse.SC_BAD_REQUEST, ex.getMessage()); return new ModelAndView(); } } catch (Exception e) { log.error("resolver ex", e); } return null; } } 현재 강의 코드package hello.exception.resolver; import com.fasterxml.jackson.databind.ObjectMapper; import hello.exception.exception.UserException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import java.util.HashMap; import java.util.Map; @Slf4j public class UserHandlerExceptionResolver implements HandlerExceptionResolver { private final ObjectMapper objectMapper = new ObjectMapper(); @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { try { if (ex instanceof UserException) { log.info("UserException resolver to 400"); String acceptHeader = request.getHeader("accept"); response.setStatus(HttpServletResponse.SC_BAD_REQUEST); if ("application/json".equals(acceptHeader)) { Map<String, Object> errorResult = new HashMap<>(); errorResult.put("ex", ex.getClass()); errorResult.put("message", ex.getMessage()); String result = objectMapper.writeValueAsString(errorResult); response.setContentType("application/json"); response.setCharacterEncoding("utf-8"); response.getWriter().write(result); return new ModelAndView(); } else { // TEXT/HTML return new ModelAndView("error/400"); } } } catch (Exception e) { log.error("resolver ex", e); } return null; } } 3. 모델과 뷰를 반환한다고 하셨는데 모델을 반환할려면 모델에 저장할려는 코드가 필요할 텐데요. setattribute처럼요. 그런 코드가 없어서요..
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 인터셉터 - 요청 로그 질문있습니다.
1.스프링 인터셉터 - 요청 로그 강의 2분 10초에서 3분까지 LogInterceptor가 싱글톤이기 떄문에 String uuid를 preHandle위에 작성하면 안된다고 하셨는데요.그런데 MemberController에서도 private final MemberRepository memberRepository; 이 부분은 변수 선언 가능한데요. 2. 스프링 인터셉터 - 요청 로그 강의 14분 13초에서 위 코드가 호출한 컨트롤러 메서드의 모든 정보가 포함되어있다. 라고 나오는데요. hm이 회색으로표시(변수 사용안함) 무슨정보가 포함되어있는건가요? @Slf4j public class LogInterceptor implements HandlerInterceptor{ public static final String LOGIN_ID = "loginId"; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String requestURI = request.getRequestURI(); String uuid = UUID.randomUUID().toString(); request.setAttribute(LOGIN_ID,uuid); //@RequestMapping:HanddlerMethod //정적리소스:ResourceHttpRequestHandler if (handler instanceof HandlerMethod){ HandlerMethod hm=(HandlerMethod)handler; } log.info("REQUEST[{}][{}][{}]",uuid,requestURI,handler); return true; } 3.bean코드를 주석처리해줬는데 addInterceptors랑 FilterRegistrationBean 랑 코드 차이가 뭔가요?제 생각엔 필터랑 인터셉터 차이같은데 LoginCheckFilter 이부분은 주석처리 안해주셔서요.@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LogInterceptor()) .order(1) .addPathPatterns("/**")//모든 경로에 대해 LogInterceptor를 실행하도록 지정합니다. 이는 모든 요청이 인터셉터를 통과하게 만듭니다. .excludePathPatterns("/css/**","/*.ico","/error");//.excludePathPatterns("/css/**","/*.ico","/error")은 /css/ 경로, .ico 파일 및 /error 경로를 제외하고 모든 요청에 대해 LogInterceptor가 실행되도록 설정합니다. } // @Bean public FilterRegistrationBean logFilter(){//스프링부트가 was를 들고 띄움. FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>(); filterRegistrationBean.setFilter(new LogFilter()); filterRegistrationBean.setOrder(1); filterRegistrationBean.addUrlPatterns("/*");//어떤 url패턴을 할꺼냐. return filterRegistrationBean; }같은강의 12분 50초에서 선생님 코드에서는 items가 아래처럼 목록이 다 뜨는데 저는 안뜹니다 .혹시 버전 문제인가요?전체코드:https://drive.google.com/file/d/13MrBawN2imZlq9AJdH1h9_3_kN5CAueU/view?usp=drive_link
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
인텔리제이에서 자바스크립트 인라인 each 작성시 오류
[질문 내용]자바스크립트 인라인 each 작성시 정상적인 문법에도 불구하고 인텔리제이에서 에러 표시가 뜹니다.서버 실행후 페이지 소스를 보면 작동이 아예 안되는것 같습니다.인터넷 검색으로 해결법을 찾아보려고 했지만 관련된 오류가 하나도 없어서 질문 올려봅니다...ㅠㅠㅠ
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
폼데이터 GET 요청 시, WhiteLabel 페이지 출력
환경: Mac OS, Spring Boot 3.2.5, Java 17 강의, 문서 코드 그대로 작성했습니다.10:10부터 설명해주시는 폼데이터 GET 요청 시, WhiteLabel 페이지가 출력이 됩니다.반환하는 뷰 이름과 뷰 파일 이름이 매칭이 되지 않는지 확인했고, 무슨 문제인지 감이 잘 잡히지 않습니다. 확인 한 번만 부탁드리겠습니다! 감사합니다
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HandlerExceptionResolver 시작 질문있습니다.
잘못된 입력값이라고 나오는데 줄이 되게 길게 나옵니다.혹시 강의처럼 똑같이 나올려면 코드 어느부분을 추가해야하나요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
프로젝트 실행 오류 해결 방법 공유 드립니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.=========================================헤매다가 해결했는데 다른 분들께 도움이 될 것같아서 커뮤니티에 남깁니다 ㅎ_ㅎ .gradle 폴더 내 6.8.2 파일 삭제(gradle 충돌 방지)gradle/wrapper/gradle-wrapper-.properties 수정distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zipbuild.gradle 파일 수정plugins { id 'java' id 'org.springframework.boot' version '3.2.5' id 'io.spring.dependency-management' version '1.1.4' } group = 'hello' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() } javax -> jakarta 수정// import javax.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HandlerExceptionResolver 시작 8분 7초에서 질문입니다.
package com.example.exception.resolver; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import java.io.IOException; @Slf4j public class MyHandlerExceptionResolver implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { try { if (ex instanceof IllegalArgumentException) { log.info("IllegalArgumentException resolver to 400"); response.sendError(HttpServletResponse.SC_BAD_REQUEST, ex.getMessage()); return new ModelAndView(); } } catch (IOException e){ e.printStackTrace(); } return null; } } package com.example.exception.api; import lombok.AllArgsConstructor; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.server.ResponseStatusException; @Slf4j @RestController public class ApiExceptionController { @GetMapping("/api/members/{id}") public MemberDto getMember(@PathVariable("id") String id) { if (id.equals("ex")) { throw new RuntimeException("잘못된 사용자"); } if (id.equals("bad")) { throw new IllegalArgumentException("잘못된 입력 값"); } return new MemberDto(id, "hello " + id); } @Data @AllArgsConstructor static class MemberDto { private String memberId; private String name; } } if (ex instanceof IllegalArgumentException) {위에 코드가 "ex" 객체가 IllegalArgumentException 클래스의 인스턴스인지를 확인합니다.근데 ex객체가 어디 선언되어있나요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
서블릿 필터 - 인증 체크 강의 질문있습니다.
18분 4초에서 6초 사이 로그인 하면 상품목록으로 바로 보여야 하는데 제코드는 홈 화면으로 갑니다.return "redirect:"+redirecURL;를 작성하면 로그인 전화면이 보여줘야 하는데 안보여집니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
서블릿 필터 - 인증 체크 질문입니다.
public class LoginController { private final LoginService loginService; private final SessionManager sessionManager; @PostMapping("/login") public String loginV3(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult, HttpServletRequest request) { if (bindingResult.hasErrors()) { return "login/loginForm"; } Member loginMember = loginService.login(form.getLoginId(), form.getPassword()); if (loginMember == null) { bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다."); return "login/loginForm"; } //로그인 성공 처리 //세션이 있으면 있는 세션 반환, 없으면 신규 생성 HttpSession session=request.getSession(); //세션에 로그인 회원 정보 보관 session.setAttribute(SessionConst.LOGIN_MEMBER,loginMember); return "redirect:/"; }@Slf4j public class LoginCheckFilter implements Filter { private static final String[] whitelist={"/","/members/add","/login","/logout","/css/*"} @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest=(HttpServletRequest) request; String requestURI = httpRequest.getRequestURI(); HttpServletResponse httpResponse=(HttpServletResponse) response; try{ log.info("인증체크 필터 시작{}",requestURI); if (isLoginCheckPath(requestURI)){//화이트 리스트가 아닐 때 true반환 로그인 상태가 필요한 사이트이라면 log.info("인증체크로직실행{}",requestURI); HttpSession session = httpRequest.getSession(false); if (session==null || session.getAttribute(SessionConst.LOGIN_MEMBER)==null){ log.info("미인증 사용자 요청{}",requestURI); //로그인으로 redirect httpResponse.sendRedirect("/login?redirectURL="+requestURI);//로그인 되면 다시 반환된 페이지로 로그인 return; } } //화이트 리스트일 때 chain.doFilter(request,response); }catch (Exception e){ throw e;//예외 로깅 가능하지만, 톰캣까지 에외를 보내주어야 한다. }finally { log.info("인증체크필터종료{}",requestURI); } { } }public String loginV3( 안에 HttpSession session=request.getSession(); 세션이 없으면 무조건 생성인데요.class LoginCheckFilter는 httpRequest.getSession(false);이거는 왜 false인가요? 로그인과 관련된 페이지 잖아요. 로그아웃의 경우 없애버릴꺼여서 세션을 만들지 않는것까지 이해했는데요.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인 처리하기 - 직접 만든 세션 적용 질문있습니다.
로그인 처리하기 - 직접 만든 세션 적용 3분 51초 부분에 요.public class HomeController {public String homeLoginV2(HttpServletRequest request, Model model){//세션 관리자에 저장된 회원 정보 조회Member member=(Member)sessionManager.getSession(request);//Object이기 때문에 member로 캐스팅 한다. SessionManager코드 중 public Object getSession(HttpServletRequest request){Cookie sesionCookie=findCookie(request,SESSION_COOKIE_NAME);if (sesionCookie==null){return null;}return sessionStore.get(sesionCookie.getValue());}sessionManager가 Object객체인데 Member로 캐스케이딩하는 데 member가Object의 부모인가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@Bean Validation이 던지는 예외 메세지를 @ExceptionHandler에 이쁘게 받는법
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Bean Validation과 @ExceptionHandler을 같이 사용하여 REST API를 작성하길 희망해서 아래와 같이 코드를 작성했습니다.#회원가입 DTO@Setter @Getter public class JoinDTO { @NotBlank(message = "아이디는 필수값입니다.") private String username; @NotBlank(message = "패스워드는 필수값입니다.") private String password; }#회원가입 컨트롤러 @PostMapping("/join") public String joinProcess(@RequestBody @Validated JoinDTO joinDTO) { 회원가입하는 로직이 들어있습니다. }#ExControllerAdvice에 MethodArgumentNotValidException예외 처리 추가@ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler public ErrorResult userExHandle2(MethodArgumentNotValidException e) { return new ErrorResult("join-ex", e.getMessage()); } 이상황에서 postman을 통해 password를 빼고 보내면 아래와 같이 응답값이 나오는데요.{ "code": "join-ex", "message": "Validation failed for argument [0] in public java.lang.String aaa.bbb.controller.JoinController.joinProcess(aaa.bbb.dto.JoinDTO): [Field error in object 'joinDTO' on field 'password': rejected value [null]; codes [NotBlank.joinDTO.password,NotBlank.password,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [joinDTO.password,password]; arguments []; default message [password]]; default message [패스워드를 입력해주세요]] " }제가 원한건 아래 형태입니다{ "code": "join-ex", "message": "패스워드를 입력해주세요" }깔끔하게 Bean Validation에서 보낸 message를 받는 방법이 없을까요?(e.getXxx메서드들 다 찍어보았는데 원하는 결과가 안나오네요 ㅠ)