묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
권한처리를 위한 세션강제주입
/api/admin 요청 시 권한만을 체크하기 위해 id 와 role 만 있는 객체를 시큐리티세션에 저장했다고 하셨는데만약 username 이나 email 이 필요한 경우라면 그 로직도 BasicAuthenticationFilter 를 상속받은 필터에서 doFilterInternal() 메서드 안에서 강제주입을 할때 username 과 eamil을 가져와서 시큐리티 세션에 강제주입하는건가요 ?
-
해결됨장애 없는 서비스를 만들기 위한 Resilience4j - CircuitBreaker
컨테이너 환경에서의 circuitbreaker 상태 전파 방식 질문
안녕하세요~ 여러 대의 서버가 컨테이너 환경에서 실행될 때, 모든 서버의 서킷 브레이커 상태를 실시간으로 자동 전파하려면 어떻게 해야 할까요?
-
해결됨스프링 시큐리티 OAuth2
마지막 장 front end 에서 리소스 서버 직접 요청
안녕하세요. 선생님어느덧 마지막장이네요.한가지 질문이 있네요.사용자에 대한 엑세스 토큰을 발급 받기 위해 사용자가 로그인 링크를 클릭해서 클라이언트 서버에 로그인 요청하면 클라이언트 서버에서 임시코드를 발급 받기 위한 인가서버 요청 url을 만들어 사용자 브라우저로 redirect 하고, 인가서버의 로그인 화면에서 로그인을 하게 되면 인가서버는 임시코드를 parameter 로 넣어서 클라이언트로 redirect 되어, 최종 클라이언트 서버가 사용자에 대한 엑세스 토큰을 인가서버에 요청하여 발급 받잖아요? 그리고 클라이언트 서버가 그 엑세스 토큰을 관리하게 되고..그러니까 클라이언트 서버가 대신 요청? 그런데 마지막장에 리소스 서버에 자원을 요청하는데.. 클라이언트 API 서버가 요청하는 것도 있고.. frond end 자바스크립트에서 클라이언트 서버를 경유하지 않고 직접 리소스 서버에 자원을 요청하는 예제가 있네요.실무에서는 이렇게 frond end 단에서 직접 리소스 서버로 요청하기도 하는지요?front end에서 클라이언트 API 서버에 요청을 하여 사용자 정보를 가져와 보여주는 식으로 구현해야 하는 것인지? 아니면 front end에서 직접 리소스 서버에 토큰 들고 요청하여 사용자 정보를 가져와 보여주는 식으로 구현해야 하는지? 실무에서 어떻게 구현하는지 알고 싶네요.
-
미해결스프링 배치
writer에서 다시 processor 호출 질문 드립니다.
질문 드립니다. processor의 return 형식이<A, B> 일 때 processor에서 A를 받아 B로 가공하여 return 하는데 이 때 B말고 다른 C도 함께 writer로 return이 가능한가요? step을 구성할 때 reader -> processor -> writer 순서인데 writer까지 진행된 이후 write 한 객체로 다시 processor 혹은 reader -> writer 등을 진행하고 싶을 땐 어떻게 해야 할까요? processor에서 조건을 사용하여 reader를 호출 하고 있는데 reader를 bean으로 생성하지 않고 reader.read(); 와 같은 방식으로 호출하는데 이 방식이 옳바른 방식인가요?
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Validation Map -> 어떻게 변경하는게 좋은지 궁금합니다.
안녕하십니까. 데이터 검증2 를 듣다가 궁금한점이 생겨서 질문을 남기게 되었습니다. @Getter @RequiredArgsConstructor public class ErrorResponse { private final String code; private final String message; private final List<Validation> validations = new ArrayList<>(); public void addValidation(String fieldName, String errorMessage) { this.validations.add(new Validation(fieldName, errorMessage)); } private record Validation(String fieldName, String errorMessage) { } } @Test @DisplayName("/posts 요청시 title 값 필수.") void test2() throws Exception { mockMvc.perform(post("/posts") .contentType(MediaType.APPLICATION_JSON) .content("{}") ) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.code").value("400")) .andExpect(jsonPath("$.message").value("잘못된 요청입니다.")) .andExpect(jsonPath("$.validations[0].errorMessage").value("title을 입력해주세요.")) .andExpect(jsonPath("$.validations[1].errorMessage").value("content를 입력해주세요.")) .andDo(print()); } 일단 Map -> List<Validation> 방식으로 수정해보았는데요@Setter @Getter @ToString public class PostCreate { @NotBlank(message = "title을 입력해주세요.") private String title; @NotBlank(message = "content를 입력해주세요.") private String content; }테스트 코드에서 0번째 에러메시지가 title을 입력해주세요 가 될 줄 알았는데 content를 입력해주세요 가 나와서 실패했습니다. (PostCreate 필드 순서대로 validations에 담길 줄 알았는데 예상되로 나오지 않았습니다.) -> 테스트 할 때마다 결과가 뒤죽박죽 이네요. 이러한 경우 어떻게 테스트 하는지 궁금합니다.또한 이렇게 만약 여러 error field가 잡히거나, 에러 메시지가 바뀌는 경우가 생기면 테스트 코드 수정이 빈번해 질 것 같은데 어떻게 해결할 수 있을지 궁금합니다.마지막으로 List<Validation> 방법 말고 조금 더 많이 쓰이는 ? 혹은 괜찮은 방법 있으면 추천해주시면 감사하겠습니다.
-
미해결스프링 부트 - 핵심 원리와 활용
라이브러리 스프링 빈 등록시 타 라이브러 사용 문의
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 표제와 같이 라이브러리 등록에 관해 궁금한점이 있어서 문의 드립니다.예제에서 메모리 기능 관련하여 기능을 구현후에 라이브러리로 만든 파일을 사용자가 import하는 예시를 들어주셨는데요. 혹시 협업 과정에서 누군가가 메모리 기능을 구현해야 하는데 해당 메모리 기능 중에서 import 될 프로젝트에서 특정 기능을 불러와서 사용해야 한다면 어떠한 방법으로 접근가능한가요??Main 프로젝트의 기능(특정 데이터 또는 서비스 호출)을 메모리 라이브러리에서 사용하고(Main프로젝트 없이) 별도로 개발 후(메모리 라이브러리)에 Main 프로젝트에서 해당 라이브리를 사용하고 싶은 케이스인데 가능한가요? 감사합니다^^
-
해결됨Spring Boot JWT Tutorial
mysql 설정로 실습시
# server port #spring.server.port=8080 # data base spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3307/데이터베이스이름?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul&characterEncoding=UTF-8 spring.datasource.username=유저 spring.datasource.password=비밀번호 # thymeleaf spring.thymeleaf.cache=false spring.jpa.database=mysql spring.jpa.database-platform= org.hibernate.dialect.MySQL8Dialect # spring data jpa spring.jpa.properties.hibernate.dialect.storage_engine=innodb spring.jpa.show-sql=true spring.jpa.open-in-view=false spring.jpa.hibernate.ddl-auto=create spring.jpa.properties.hibernate.format_sql=true spring.jpa.properties.hibernate.show_sql=true spring.jpa.defer-datasource-initialization= true spring.sql.init.mode= always logging.level.org.silvernine=DEBUGplugins { id 'java' id 'org.springframework.boot' version '3.1.5' id 'io.spring.dependency-management' version '1.1.3' } group = 'NewYear' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.testng:testng:7.1.0' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' implementation 'mysql:mysql-connector-java:8.0.29' // implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.29' runtimeOnly 'mysql:mysql-connector-java' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' 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('bootBuildImage') { builder = 'paketobuildpacks/builder-jammy-base:latest' } tasks.named('test') { useJUnitPlatform() } mysql에 정상적으로 connection이 되는 데 Entity에서 테이블 생성을 못하는 거 같습니다.따로 오류는 없고, 테이블이 생성이 안됩니다.data.sql에서 따로 테이블을 생성하는 구문을 넣으면 테이블과 컬럼값들이 제대로 들어가는 데 Entity에선 테이블을 자동으로 생성하지 못합니다.무엇이 문제일까요? ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트 파일을 실행시켰을때 결과화면
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.h2데이터베이스에 잘 실행이 되는것을 확인했는데 강사님 화면처럼 insertinto ~~이런식으로 안떠서 뭐가 문제인건가요??
-
미해결토비의 스프링 부트 - 이해와 원리
Environment Abstraction 의 우선순위
섹션8의 Environment 추상화와 프로퍼티 제목의 강의의 막바지 부분에서 Environment Abstraction 의 우선순위에 대한 내용이 나옵니다. 강의 내용을 요약해보자면 ServletConfig Parameter < ServletContext Parameters < JNDI < System Properties < System Environment Variables < @PropertySource < application.properties, xml, yml 대로 오른쪽으로 갈 수록 우선순위가 높다라고 이해를 했습니다. 우선 저는 System Properties가 jvm 옵션을 말하는건가? 라는 생각을 가지고 들었고 그렇게 생각하고 위의 내용을 보니 jvm option의 우선순위가 os의 환경 변수보다 높아야 되는거 아닌가? 라는 궁금증이 생겼습니다. 제목 그대로 우선순위에 대한 내용에 오류는 없는것인지 궁금합니다.++ 질문 수정"자동 구성에 Environment 프로퍼티 적용" 강의를 들어보니 우선순위를 제가 반대로 이해한것 같습니다. 여기서 추가적으로 궁금증이 생겼습니다.저는 application level의 설정이 더 우선해야 되는 것 아닌가? 라는 생각에application property > jvm property > os level property 라고 생각을 했습니다. 하지만 스프링에서는jvm property > os level property > application property의 우선순위를 가지게 한 것 같은데 그 이유가 무엇일까요?이것에 대한 생각이 어떠신지 궁금합니다.그리고 우선순위의 변경을 원한다면 바꿀 수 있도록 스프링이 제공하는지도 궁금합니다! 감사합니다.=======================제가 강의 내용을 끝까지 안듣고 궁금한것을 적었는데..질문을 남기고 나머지 강의를 들어보니 궁금했던 내용이 해소가 됐네요. 자문 자답하자면, application의 설정을 default로 하되, 어떤 환경에서 어떤 사용자가 사용하냐에 따라 설정이 달라질 수 있어야 하기 때문에 jvm, os level의 property보다 우선순위가 낮아야 할 것입니다. 이왕 글을 남긴거 삭제하기 뭐해서 남겨두겠습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2 데이터베이스 연결할 때 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 궁금한 점이 생겨 질문 드립니다.jdbc url도 다 연결이 되고 test.mv.db도 있었습니다. 그런데 7분 이후의 과정을 따라가려 하니 그 다음단계를 진행하려고 할 때마다 연결이 끊어져 매번 del을 해주고 있는데 매번 이래야 하나요?? 아니면 연결이 끊어지는 특정 조건이 있는 건가요? 감사합니다!
-
미해결스프링 배치
안녕하세요. 신규 강의 관련
해당 강의와 관련된 질문은 아니지만 동시성 관련 강의 오픈 메일에 링크가 이쪽으로 연결이 돼서요.11/21~28 오픈 예정이라고 하셨는데 혹시 오픈일정을 알 수 있을까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
보상 트랜잭션의 대한 후속 강의 2차 문의합니다.
보상 트랜잭션의 대한 후속 강의 문의합니다.8개월 전쯤 상반기에 출시 계획이 있다고 하셨는데, 언제쯤 강의를 출시할 계획이신가요?전체적인 로드맵을 공유해주시면 좋을 것 같습니다.후속 강의가 너무 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
쿼리 로그가 안나옵니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요.MemberRepositoryTest 실행시에 실행잘되고 기대했던 결과도 나오지만 쿼리 로그가 보이지 않습니다. junint5로 테스트 실행했습니다. 1. MemberRepositoryTest 클래스 파일 소스 package jpabook.jpashop; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import javax.transaction.Transactional; import static org.assertj.core.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*; @SpringBootTest class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test @Transactional @Rollback(value = false) public void testMember() throws Exception{ //given Member member = new Member(); member.setUsername("memberA"); //when Long savedId = memberRepository.save(member); Member findMember = memberRepository.find(savedId); //then assertThat(findMember.getId()).isEqualTo(member.getId()); assertThat(findMember.getUsername()).isEqualTo(member.getUsername()); } } ///////////////////////////// 설정파일 정보는 아래와 같습니다. 1. build.gradle plugins { id 'java' id 'org.springframework.boot' version '2.7.17' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'jpabook' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '11' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-devtools' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('bootBuildImage') { builder = 'paketobuildpacks/builder-jammy-base:latest' } tasks.named('test') { useJUnitPlatform() } 2. application.yml spring: datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: #show_sql: true format_sql: true logging.level: org.hibernate.SQL: debug #org.hibernate.type: trace #스프링 부트 2.x, hibernate5
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
new를 이용하지 않는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 궁금한 점이 생겨 질문 드립니다.1.3분 4초 즈음 new로 인스턴스를 생성해서 사용하면 MemberSerivce를 MemberController 말고 다른 컨트롤러도 가져다 쓸 수 있다고 언급하셨는데 private인데도 접근할 수 있는 건가요,,,? 실행버튼이 나오지 않아 커뮤니티 검색해서 helloSpringApplication에서 작동시켜서 선생님과 같은 화면까지는 나왔는데요, 선생님께서는 컨트롤러에도 실행 버튼이 있는데 제 거에는 없는 이유가 있을까요..? 무료와 유료의 차이인가요?감사합니다!
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
GET API까지는 잘 하다가 인텔리제이 껐다가 다시 키고 POST API 수업따라 코드 작성 후 서버 실행하니 라는 오류가 발생합니다...
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
get()을 하는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요! 수업 도중 궁금한 점이 생겨 질문드립니다.@Test public void save() { Member member = new Member(); member.setName("spring"); repository.save(member); Member result = repository.findById(member.getId()).get(); // System.out.println("result = " + (result==member)); Assertions.assertEquals(member, result); } 이 부분에서 Member result를 할 때 get()을 해주는 이유는 findById의 반환값이 optional이기 때문인건가요...? 그렇다면 optional은 get을 왜 해줘야하는지도 궁금합니다. 감사합니다
-
미해결스프링 배치
다음과 같은 부분에서 어떤 부분을 먼저 수강하는 게 좋을까요?
안녕하세요. 회사에서 저한테 매일 밤 12시에 20개 사이트에서 각각 1000 ~ 6000개의 데이터를 크롤링 후 해당 데이터 목록을 조회하는 웹 사이트 제작 업무를 맡겨서 진행중입니다. 업무를 시키실 때 스프링 배치를 활용해서 만들라고 하시고, 다른 곳에 출장가셔서 사무실에서 혼자 해당 업무를 완료해야하는 상황입니다ㅠㅠ. 다소 답답한 질문일 수도 있지만 다음과 같은 상황에서 제가 잘못 생각하고 있는 게 있는지, 또 이 상황을 해결하려면 어떤 부분의 강의를 들으면 되는지 여쭙고 싶습니다. 스프링 배치 개념이 익숙치 않기 때문에 스프링 MVC로 먼저 만들어봤습니다. 대신 Insert는 배치쪽에서 해야한다고 생각하여 service단에서 DB에 insert를 하는 dao 메소드를 실행시키지 않고 해당 데이터를 담은 List<VO>를 return 후 controller에서 DB insert하는 쪽으로 생각해봤습니다. 그대로 스프링 배치로 가져오려고 하니 step에서 service를 그냥 실행하고 List<VO>를 받아 DB insert를 하는 dao를 실행하면 되는지 아니면 service에 해당하던 내용을 ItemReader, processor, writer과 같이 스프링 배치에서 사용하는 클래스로 바꿔야 하는건지 잘 모르겠습니다. 또 20개의 서비스를 호출해야 하는데, 1개의 job에서 1개의 step에서 호출하는 게 좋을지, 1개의 job에서 20개의 step을 만드는 게 좋을지 각각 20개의 job을 만드는 게 좋을지 여쭤보고 싶습니다. 감사합니다
-
미해결스프링 시큐리티 OAuth2
인가서버와 websecurityconfigureradapter
안녕하세요, 강사님? 강의 잘듣고 있습니다. 이제 막 회사에서 일하기 시작한 주니어 개발자입니다. 제 회사에서는 websecurityconfigureradapter 를 상속받아서, spring boot 2.7.6에서 사용하고 있습니다.이 경우에는 authorization server를 마지막 강의에서 사용하신 source code를 활용해보니 작동하지않았습니다. illegalStateException에서 security filter chain과 websecurityconfigureradapter 둘중 하나를 사용하라는 문제에 부딪혔습니다. 그외에도 oauth2 authroization server 관련 jar내 class들이 security filter chain을 형성하는 과정이 관련 있는 것 같아서, 동작하지 않는것으로 보이기도 합니다. 예를들면 @Bean (clientRegistration을 수행하는메서드) 입니다. 혹시 oauth2로는 websecurityconfigureradapter 과 함께 쓸수가 없는 것일까요? 있다면, 혹시 관련 코드를 가지고 계신것이 있다면 공유해주시면 감사드리겠습니다.!
-
미해결스프링 시큐리티 OAuth2
JWT Verify에 대한 질문이 있습니다.
protected String getJwtTokenInternal(JWSSigner jws, UserDetails user, JWK jwk) throws JOSEException { // JWT token 을 만들기 위해 3가지가 필요함(header, payload, sig) JWSHeader header = new JWSHeader.Builder((JWSAlgorithm) jwk.getAlgorithm()).keyID(jwk.getKeyID()).build(); List<String> authorities = user.getAuthorities().stream().map(author -> author.getAuthority()).collect(Collectors.toList()); JWTClaimsSet payload = new JWTClaimsSet.Builder() .subject("user") .issuer("http://localhost:8080") .claim("username", user.getUsername()) .claim("authority", authorities) .expirationTime(new Date(new Date().getTime() + 1000)) //1초 .build(); SignedJWT signedJWT = new SignedJWT(header, payload); // 서명 signedJWT.sign(jws); //토큰 발행 String jwtToken = signedJWT.serialize(); return jwtToken; } expiration Time 말고는 강사님 코드랑 동일합니다.토큰 만료되는 걸 체크하고 싶어서 테스트 코드를 작성했습니다. 만료시간을 1초로 만들었습니다. @Test @DisplayName("test") void test() throws JOSEException, InterruptedException, ParseException { UserDetails user = userDetailsService.loadUserByUsername("user"); System.out.println(user); String jwtToken = securitySigner.getJwtToken(user, jwk); System.out.println("jwtToken = " + jwtToken); Thread.sleep(7000); SignedJWT signedJWT = SignedJWT.parse(jwtToken); boolean verify = signedJWT.verify(new RSASSAVerifier(jwk)); System.out.println("verify = " + verify); } 근데 위의 테스트 코드를 실행한 결과7초라는 지연을 주었는데도 불구하고verify가 참으로 뜨네요. 어떤게 문제일까요?
-
해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
docker에 관하여 질문 드립니다.
안녕하세요 우선 끝까지 강의 잘들었습니다!!! docker 부분이 아직 익숙하지 않아 질문드립니다docker를 따라 설치하니 저장소 같은 곳에 이미지가 저장되는 것을 확인하였습니다.해당 이미지를 aws 인스턴스에서 받아서 바로 사용할 순 없는건가요? -> 굳이 git clone으로 프로젝트를 받아와야 하는지 궁금합니다 / docker 저장소에 이미지를 올리고 바로 받아서 실행하면 되는게 아닌가 싶어서 질문드립니다...2.가 만약 틀린거라면 build/libs에 있는 파일이 직접적으로 실행을 시키면서 애플리케이션이 실행되는 것 같은데 이 이미지를 굳이 docker 저장소에 올리는 이유가 궁금합니다.