묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
try-catch 3개로 구현한 이유?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 ~ 순수 JDBC 11:08를 보면리소스를 해제하는 close 메서드가 있습니다.3개의 try - catch 문에서 매개변수 3개가 null이 아니면 close를 하고 예외가 발생하면 SQLException을 던지는 방식인데요 발생하는 모든 예외가 다 똑같이 SQLException인데 try - catch 3개로 한 특별한 이유가 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
데이터 초기화하는 방법(@PostConstruct)
제 문제 해결 접근이 맞는것인지 질문드립니다! 테스트할 때마다 회원, 상품을 새로 등록해야하는 것이 번거로워서, 기본편에서 배운 초기화 콜백을 이용해 우선 Item을 초기화해보려고 했습니다. // ItemService.java @PostConstruct @Transactional public void initData() { Book book1 = new Book(); book1.setName("book1"); book1.setPrice(1000); book1.setStockQuantity(10); book1.setAuthor("Steven"); book1.setIsbn("10000"); itemRepository.save(book1); }위와 같이 ItemService에 초기화 메서드를 추가했는데 계속 해서 에러가 났습니다. 검색해보니 아무래도 초기화 콜백과 트랜젝션 처리를 initData()하나로 동시에 처리하려다보니 발생한 문제 같았습니다. 초기화 콜백을 확실히 완료하고나서 트랜젝션 처리를 해야 트랜젝션이 정상적으로 작동하는 것 아닌가 싶습니다. 단순히 코드상으로 이를 보장할 방법이 떠오르지 않았습니다. 이 때 떠오른게 DB2편의 @EventListener(ApplicationReadyEvent.class)인데, ApplicationReadyEvent가 스프링 컨테이너 초기화를 완전히 마치고 발생하는 이벤트라고 알고 있습니다. 이렇게 하니 초기화가 잘 됐습니다. 이처럼 선언적 트랜젝션을 적용하는 상황에서 초기화를 하기 위해서는 @EventListener(ApplicationReadyEvent.class)를 적용하는 것이 맞는 접근법일까요?@EventListener(ApplicationReadyEvent.class) @Transactional public void initData() { Book book1 = new Book(); book1.setName("book1"); book1.setPrice(1000); book1.setStockQuantity(10); book1.setAuthor("Steven"); book1.setIsbn("10000"); itemRepository.save(book1); }정상 작동한 최종 코드입니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
hello페이지에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]페이지 에러가 뜹니다 에러내용은 이렇습니다타임리프쪽이 에러이고 다른파일에서는런이안돼는데 HelloSpringAplication파일에서만 런이되는데 원래 이런건가요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
getHandler() 에서의 로직과 그 이후
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]안녕하세요. doDispatcher에서의 getHandler() 코드를 보다가 제가 나름대로 정리해본 것이 맞는 지 질문드립니다.한 url 에서 요청이 오면, 핸들러 맵핑 조회에서 1순위가 RequestMappingHandlerMapping 이므로, 먼저 getHandler()의 while 문 내부 HandlerMapping mapping 에 RequestMappingHandlerMapping이 대입된다.// 스프링 getHandler() 코드 일부 발췌 if (this.handlerMappings != null) { Iterator var2 = this.handlerMappings.iterator(); while(var2.hasNext()) { HandlerMapping mapping = (HandlerMapping)var2.next(); HandlerExecutionChain handler = mapping.getHandler(request); if (handler != null) { return handler; } } } 다음 줄의 mapping.getHandler(request)를 통해 @Controller가 붙은 클래스 중, 요청 url와 맞는 @RequestMapping(”url”)이 붙여진 메소드를 보유한 클래스를 핸들러로 가져온다.디스패처서블릿이 이 핸들러와 맞는 어댑터(RequestMappingHandlerAdapter)를 찾아오고,어댑터.handle() 을 통해 @RequestMapping(”url”)이 붙여진 메소드가 실행된다. 제가 생각한것이 맞는 지 궁금하여 질문드립니다.감사합니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
진행과정중 로그 표시
김영한 선생님과는 다르게 너무 로그가 간단하게 나오고 좌측에 Test Results도 열어봐도 아무것도 없다고 나옵니다 왜그럴까요? ㅠㅠ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
username=kim&username=hello의 경우 잘못 설계한거 아닌가요?
처음에는 username=kim&username=hello와 같이 쿼리 파라미터를 사용한다면 잘못 설계한것이 아닌가 생각을 했는데오히려 스프링 자체에서 getParameterValues로 중복된 쿼리 파라미터의 키를 허용한다면 의도적으로 사용할 수도 있는건지, 그렇다면 왜 저렇게 사용하는지 궁금합니다.
-
해결됨스프링 핵심 원리 - 기본편
싱글톤으로 여러 사람의 정보를 어떻게 저장하나요 ?
싱글톤을 활용해서 개인정보 등을 저장한다고 하면 MemberService 객체 하나가 여러 사람들에게 사용되잖아요? 근데 어떻게 각각의 사람들의 객체를 생성해주며 그런 개인정보를 db에 저장할 수가 있는걸까요? DB에 저장할 때는 결국 객체 자체를 저장하지 않습니까? 근데 싱글톤은 객체가 1개라는 점이 너무 상반되어서 이해가 안되는 것 같습니다
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
정적인 화면과 정적 리소스
6:57에 나오는 서버사이드 렌더링에 대해서 질문드립니다HTML 최종 결과를 서버에서 만들어서 웹 브라우저에 전달주로 정적인 화면에 사용이렇게 나와있는데요서버에서 만들어서 제공하는거면 동적 리소스인데 왜 정적인 화면에 사용한다는 건가요?동적 리소스 == 동적 화면정적 리소스 == 정적 화면아닌가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링이랑 관련없는 번외질문입니다!
스프링MVC1편 수강생이 약 2만3천명이라고 뜨는데 이게 2024년도 기준 수강생인가요? 아니면 스프링MVC1편 출시날부터 오늘까지 누적수강생이 2만3천명이라는걸까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Entity 클래스에 기본 생성자가 없는데 왜 에러가 안나는 걸까요
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]섹션 2 - 엔티티 클래스 개발2 15:18쯤에 강사님께서도 말씀하셨고, 직접 보여주셨듯이 Entity 클래스에 기본생성자가 없으면 컴파일 에러가 발생한다고 알고 있는데 저는 왜 컴파일 에러가 발생하지 않을까요?? @Embeddable 어노테이션 때문에 그런가 싶어서 다른 Entity 클래스에서도 확인해봤지만 똑같이 기본 생성자가 없어도 컴파일 에러가 발생하지 않습니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
스스로 찾고싶었지만 이 이상 찾을 수가 없습니다..
안녕하세요 이번강의에서 후반부까지는 잘 되었다가 마지막 과정에서 막혀서 질문 드립니다.우선 오류가 났다고 생각하는곳은 Id와 BookName으로 대출기록을 불러오고 doReturn을 불러오는 과정에서예외가 발생되었고 예외가 발생되었기때문에 아이디와 책 이름이 일하는기록이 없어서 예외가 나왔다고 생각했습니다.하지만 터미널로 sql문을 이용해 찾아봐도user_loan_history의 user_id와user의 id가 같았습니다.이 이상 Id대신 이름을 getName을 해봐도 오류가 나서 진행을 못하는 상황입니다.. 오류의 원인이 뭔지 알 수 있을까요2024-03-22 17:03:37.674 ERROR 84411 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException] with root cause java.lang.IllegalArgumentException: null at java.base/java.util.Optional.orElseThrow(Optional.java:403) ~[na:na] at com.group.libraryapp.Service.book.BookService.returnBook(BookService.java:71) ~[classes/:na] at com.group.libraryapp.Service.book.BookService$$FastClassBySpringCGLIB$$1faa236c.invoke(<generated>) ~[classes/:na] at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.24.jar:5.3.24] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) ~[spring-aop-5.3.24.jar:5.3.24] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.24.jar:5.3.24] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.24.jar:5.3.24] at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.24.jar:5.3.24] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.24.jar:5.3.24] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.24.jar:5.3.24] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.24.jar:5.3.24] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.24.jar:5.3.24] at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) ~[spring-aop-5.3.24.jar:5.3.24] at com.group.libraryapp.Service.book.BookService$$EnhancerBySpringCGLIB$$892e8bee.returnBook(<generated>) ~[classes/:na] at com.group.libraryapp.controller.book.BookController.returnBook(BookController.java:32) ~[classes/:na] at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:577) ~[na:na] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.24.jar:5.3.24] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.24.jar:5.3.24] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1071) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:920) ~[spring-webmvc-5.3.24.jar:5.3.24] at javax.servlet.http.HttpServlet.service(HttpServlet.java:699) ~[tomcat-embed-core-9.0.69.jar:4.0.FR] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.24.jar:5.3.24] at javax.servlet.http.HttpServlet.service(HttpServlet.java:779) ~[tomcat-embed-core-9.0.69.jar:4.0.FR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.69.jar:9.0.69] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.24.jar:5.3.24] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.24.jar:5.3.24] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.24.jar:5.3.24]
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
DataSourceUtils import가 안돼요.
[질문 내용]저는 이클립스 4.2 , JDK17버전을 사용하고 있습니다.근데 datasource 연결하는데import가 되지 않습니다..private Connection getConnection() { return DataSourceUtils.getConnection(dataSource); }
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원 가입 시 member
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. public Long join(Member member){ validateDuplicateMember(member); System.out.println(member.getId()); memberRepository.save(member); System.out.println(member.getId()); return member.getId(); }위 코드는 멤버 가입 시 MemberService의 join 메소드 입니다.member의 아이디가 부여되는 시점은 memberRepository.save(member);가 호출되어 저장이 되는 시점입니다.위 코드에서 return member.getId();의 member는 컨트롤러에서 넘어온 member왜 같은 인스턴스라고 생각됩니다. 1. memberRepository.save(member);가 아닌member = memberRepository.save(member); 2번의 코드의 경우 id가 생긴 member를 다시 member에 저장하게 되어 member.getId()를 호출하면 아이디가 나오는 것이 맞다고 생각되는데 1번처럼 코드를 작성해도 member에 id가 왜 저장되어 있는지 궁금합니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
8분쯤 나오는 첫번째테스트 오류
[질문 내용]다음과 같은 오류가 발생하는데 이유를 모르겠네요 ㅠㅠ
-
미해결Practical Testing: 실용적인 테스트 가이드
실무에서 연관관계 매핑에 대해 질문이 있습니다.
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 실무에서는 연관관계 매핑이 하나의 애그리게이트에서는 사용하되 다른 에그리게이트와 매핑시에는 엔티티 매핑이 아닌다른 에그리게이트의 id로 매핑한다고 하더라구요. 엔티티 매핑이 ManyToOne 관계에서 Many쪽에 one의 id로 매핑을 매핑하면 되는데, ManyToMany 관계에서의 다른 애그리게이트 관계와의 연관 관계 매핑이 아닌 id로는 어떻게 해결하시는 궁금합니다.
-
해결됨스프링 핵심 원리 - 기본편
@Autowired 의존성 주입 궁금한
@Autowired private final MemberRepository memberRepository;private final MemberRepository memberRepository; @Autowired public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; }차이점을 잘 몰라서 그런데...의존성 주입 할때 아래 코드로 하는 이유가 무엇입니까?
-
미해결스프링 시큐리티 OAuth2
id_token과 access_token의 개념에 대하여
안녕하세요. scope에 openid를 포함하면 id_token을 발급 받을 수 있는데요. 이 id_token과 access_token의 정확한 사용 용도가 헷갈립니다.제가 이해하는 바가 맞는지 확인 부탁드립니다. 인증 : 사용자가 유효한 사용자인지 판단하는 것인가 : 사용자가 해당 기능을 사용할 권한이 있는지 판단하는 것 사용자 인증 관점에서 인증이 통과(scope에 openid가 있는 경우)하면 access_token과 id_token을 받습니다. 인증만이 필요한 경우라면 id_token에 있는 사용자 정보로 확인하면 되나요?만약 제가 개발한 서비스가 있고 사용자별 권한의 차등이 없는 경우 세션 없이 인증을 유지하기 위해서는 로그인 후 발급받은 이 id_token을 들고 다니면서 id_token값으로 토큰의 값 유무와 만료시간 등 으로 유효 사용자를 확인하면 되나요?토큰의 값으로만 확인해도 되는지 아니면 jwt에서 제공되는 어떤 validation 함수같은걸로 우선 위변조를 확인한후 위변조가 없다는것이 확인된 후에 값을 비교해서 사용하면 되는지 궁금합니다. 그리고 만약 위의 인증을 access_token 으로 한다면 access_token은 원래 태생이 인가(권한)이기 때문에 userinfo 엔드포인트를 호출하여 사용자 정보를 가져온 후에 이 사용자 정보로 사용자가 누구인지 인증을 확인하는것이죠? 저는 access_token없이 id_token만으로도 userinfo 엔드포인트를 호출 할 수 있는지 확인하기 위해postman에서 id_token을 bearer 토큰으로 호출했는데 401로 id_token 만 가지고는 userinfo 정보를 확인이 안되더라고요. 이게 맞는건가요? 아시는 고수님들의 답변 기다리겠습니다.
-
미해결토비의 스프링 부트 - 이해와 원리
web.xml -> dispatcherServlet 질문
안녕하세요.강의에서 조금 벗어난 주제일 수도 있는데, 기존 레거시 프로젝트를 스프링부트로 전환하는 작업을 하고 있는데, web.xml의 .do를 spring boot에서 어떻게 사용할 수 있는지 너무너무 궁금합니다.현재 아래와 같이 변경해 봤는데 전혀 작동을 안 합니다 ㅠㅠ @Configuration @RequiredArgsConstructor public class ServletConfig { private final DispatcherServlet dispatcherServlet; @PostConstruct public void init() { dispatcherServlet.setThreadContextInheritable(true); } @Bean public ServletRegistrationBean<DispatcherServlet> dispatcherServletRegistration() { ServletRegistrationBean<DispatcherServlet> registration = new ServletRegistrationBean<>(dispatcherServlet, "/", "*.do"); registration.setLoadOnStartup(-1); registration.setName(DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME); return registration; } @Bean public DispatcherServletPath dispatcherServletPath() { return () -> "/"; } } spring 4 버전의 web.xml 에서 url-mapping을 / , *.do 로 설정 해 놨는데, 프로젝트에서 @RequestMapping을 사용할땐 .do를 따로 적지 않아도 .do 요청을 알아서 매핑해 주던데, 이 부분도 정확히 어떤 원리로 동작하는지 모르겠습니다 ㅠㅠex) login.do --> @RequestMapping("/login").do 설정을 2주째 보고 있는데 진척이 없네요 .....
-
미해결스프링 시큐리티 OAuth2
oidc userinfo 확인 시 오류가 납니다.
안녕하세요. 강의 잘 보고 많은 부분 배워가고 있습니다. 강의 진행중 섹션 7의 OAuth2 로그인 구현 - Oauth 2.0 User 모델 소개(2)에서뒷부분 oidc로 사용자 정보 조회하는 부분인데요. @GetMapping("/oidc") public OAuth2User oidc(String accessToken, String idToken) { ClientRegistration clientRegistration = clientRegistrationRepository.findByRegistrationId("keycloak"); OAuth2AccessToken oAuth2AccessToken = new OAuth2AccessToken(OAuth2AccessToken.TokenType.BEARER, accessToken, Instant.now(), Instant.MAX); Map<String, Object> idTokenClaims = new HashMap<>(); idTokenClaims.put(IdTokenClaimNames.ISS, "http://localhost:9091/realms/oauth2"); idTokenClaims.put(IdTokenClaimNames.SUB, "OIDC0"); idTokenClaims.put("preferred_username", "userpww"); OidcIdToken oidcIdToken = new OidcIdToken(idToken, Instant.now(), Instant.MAX, idTokenClaims); OidcUserRequest oAuth2UserRequest = new OidcUserRequest(clientRegistration, oAuth2AccessToken, oidcIdToken); OidcUserService oidcUserService = new OidcUserService(); OAuth2User oAuth2User = oidcUserService.loadUser(oAuth2UserRequest); return oAuth2User; }oidcUserService.loadUser(oAuth2UserRequest); 이 부분이 실행될 때loadUser 메서드 내부의 if (!userInfo.getSubject().equals(userRequest.getIdToken().getSubject())) { OAuth2Error oauth2Error = new OAuth2Error(INVALID_USER_INFO_RESPONSE_ERROR_CODE); throw new OAuth2AuthenticationException(oauth2Error, oauth2Error.toString()); }이 부분을 타면서 예외가 발생합니다. 어떤 부분을 확인해 봐야 할까요?userInfo의 sub와 userRequest의 sub가 달라서 그런걸까요?읽어주셔서 감사합니다.
-
미해결3. 웹개발 코스 [Enterprise Architecture(EA) X 전자정부프레임워크]
무료쿠폰 요청합니다.
강의 잘 듣고 있습니다.트랜잭션관련하여 이전강의를 참고하고자 합니다.무료쿠폰 부탁드립니다.감사힙니다.