keycloak 최신버전(23.0.1) 에서는 implict 설정할때에 redirect url 설정하는 부분이 사라졌습니다
미해결
스프링 시큐리티 OAuth2
그러다보니 화면대로 implict로 인증받을 때에 401 응답만 계속 받게 되고 토큰 조차 확인이 안되네요 혹시 다른 방법이 있을까요?
- java
- spring
- spring-boot
- oauth
173만명의 커뮤니티!! 함께 토론해봐요.
미해결
스프링 시큐리티 OAuth2
그러다보니 화면대로 implict로 인증받을 때에 401 응답만 계속 받게 되고 토큰 조차 확인이 안되네요 혹시 다른 방법이 있을까요?
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] Oracle DB를 연동해서 강의 내용을 따라가고있는데, 저기 getLong부분에서 계속해서 오류가 발생합니다 ㅠㅠ 오류 내용은 위와 같습니다... 실제DB에 값은 잘저장됩니다. Member라는 클래스 대신 User라고 이름을바꿔 사용하고있고, 사진과 같이 멤머변수도 두개 추가하였습니다.(아래는 getter/setter 코드입니다.) 오라클 테이블은 다음과 같이 사용하고있습니다..
미해결
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
강의내용그대로 입력하였는데 왜그럴까요 ㅠㅠ 서비스부분 public void loan(BookLoanReq req) { Book book = bookRepstory.findByName(req.getBookName()).orElseThrow(IllegalArgumentException::new); if (userLoanHistoryRep.existsByBookNameAndIsReturn(book.getName(), false)){ throw new IllegalArgumentException("대출중인 책입니다."); } User user=userRepstrory.findByName(req.getUserName()).orElseThrow(IllegalArgumentException::new); userLoanHistoryRep.save( new UserLoanHistory(user.getId(),book.getName(),false)); } public interface UserRepstrory extends JpaRepository<User,Long> { Optional<User> findByName(String name); } package com.group.libraryapp.domain.user; import javax.persistence.*; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; public User(String name,Integer age) { if(name==null||name.isBlank()){ throw new IllegalArgumentException(String.format("널값")); } this.name = name; this.age = age; } @Column(name="age",length = 20) private Integer age; @Column(name="name",nullable = false) private String name; protected User(){ } public Long getId() { return id; } public Integer getAge() { return age; } public String getName() { return name; } public void update(String name){ this.name=name; } public User(Long id, Integer age, String name) { this.id = id; this.age = age; this.name = name; } } 마지막으로 오류코드올려드릴게요 ava.lang.IllegalArgumentException: null at java.base/java.util.Optional.orElseThrow( Optional.java:403 ) ~[na:na] at com.group.libraryapp.service.book.BookService.loan ( BookService.java:39 ) ~[main/:na] at com.group.libraryapp.controller.book.BookController.loan ( BookController.java:29 ) ~[main/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:77 ) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43 ) ~[na:na] at java.base/java.lang.reflect.Method.invoke( Method.java:568 ) ~[na:na]
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] WARNING: A Java agent has been loaded dynamically (C:\Users\home\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy-agent\1.14.10\90ed94ac044ea8953b224304c762316e91fd6b31\byte-buddy-agent-1.14.10.jar) WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information WARNING: Dynamic loading of agents will be disallowed by default in a future release OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 테스트는 성공하는데 이렇게 경고문이 뜨는데 무시해도 될까요?? 구글링 해봐도 안나와서요
미해결
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'bookService' defined in file [C:\Users\user\OneDrive\���� ȭ��\����ڷ�\Java_Spring_Library_Application new\library-app\library-app\build\classes\java\main\com\group\libraryapp\service\book\BookService.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userLoanHistoryRep' defined in com.group.libraryapp.repstory.user.userloan.UserLoanHistoryRep defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract boolean com.group.libraryapp.repstory.user.userloan.UserLoanHistoryRep.existIsBookNameAndIsReturn(java.lang.String,boolean); Reason: Failed to create query for method public abstract boolean com.group.libraryapp.repstory.user.userloan.UserLoanHistoryRep.existIsBookNameAndIsReturn(java.lang.String,boolean)! No property 'existIsBookName' found for type 'UserLoanHistory'; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract boolean com.group.libraryapp.repstory.user.userloan.UserLoanHistoryRep.existIsBookNameAndIsReturn(java.lang.String,boolean)! No property 'existIsBookName' found for type 'UserLoanHistory' 요약해보면 자바의 DTO객채의 이름하고 mysql에있는 테이블의 이름과 일치 하지않아서오류가 발생하는듯하는듯한데 왜 오류가 발생할까요? 객채생성하고 테이블올려드릴게요
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <body> <div class="container"> <div> <table> <thead> <tr> <th>#</th> <th>이름</th> </tr> </thead> <tbody> <tr th:each="member : ${members}"> <td th:text="${member.id}"></td> <td th:text="${member.name}"></td> </tr> </tbody> </table> </div> </div> <!-- /container --> </body> </html> 여기서 ${ member.id} 와 ${ member.name} 은 member 객체에 getter가 있어야만 접근할 수 있는건가요? 그리고 ${member.getId()} 이런식으로는 접근이 안되나요?
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
private static Map<Long, Member> store = new HashMap<>(); private static long sequence = 0L; @Override public Member save(Member member) { member.setId(++sequence); store.put(member.getId(), member); return member; } 여기서 궁금한게 save 메서드에서 왜 member를 return 하나요? return 된 member를 사용하는 곳은 어디에도 안보이는데 왜 return 하는지 궁금합니다.
해결됨
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 뭐가 문젠지 전혀 모르겠습니다 ㅠㅠ
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. findById와 findByName에서 id는 find를 쓰고 name은 createQuery를 쓰는 건 id는 member로 반환하고 name은 list로 반환하기 때문인건가요? find와 createQuery 둘다 조회하는 메서드인데 어떤 차이가 있는지 궁금합니다.
미해결
코드로 배우는 React 19 with 스프링부트 API서버
삭제 테스트중 의문점이 하나 있어서 질문드립니다 삭제를 위한 검색쿼리 Hibernate: select c1_0.cno from tbl_cart c1_0 left join tbl_cart_item c2_0 on c2_0.cart_cno=c1_0.cno where c2_0.cino=? 작성하지 않았는데 발생하는 쿼리 Hibernate: select c1_0.cino, c2_0.cno, o1_0.email, o1_0.nickname, o1_0.pw, o1_0.social, p1_0.pno, p1_0.del_flag, p1_0.pdesc, p1_0.pname, p1_0.price, c1_0.qty from tbl_cart_item c1_0 left join tbl_cart c2_0 on c2_0.cno=c1_0.cart_cno left join member o1_0 on o1_ 0.email =c2_0.member_owner left join tbl_product p1_0 on p1_0.pno=c1_0.product_pno where c1_0.cino=? 삭제쿼리 Hibernate: delete from tbl_cart_item where cino=? 삭제후 아이템 재검색쿼리 Hibernate: select c1_0.cino, c1_0.qty, p1_0.pname, p1_0.price, i1_0.file_name from tbl_cart_item c1_0 join tbl_cart c2_0 on c1_0.cart_cno=c2_0.cno left join tbl_product p1_0 on c1_0.product_pno=p1_0.pno left join product_image_list i1_0 on p1_0.pno=i1_0.product_pno where i1_0.ord=0 and c2_0.cno=? 삭제 쿼리시 위와같은 쿼리들이 실행되는데요 삭제를 위한 검색쿼리 후 알수없는 쿼리하나가 더 실행되는데 이쿼리가 실행되는 이유를 알고 싶습니다.
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. fail(); 부분에서 setName("test")로 member1, member2를 같게 해주었는데도 오류가 발생하여 질문드립니다. 혹시 fail()을 잘못 사용하였는지 확인하기 위해 join을 두번 다 member1으로 하였을 때는 오류가 발생하지 않았습니다.
미해결
실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
현재 queryDSL 마지막 릴리즈 버전이 Github 기준으로 2021년도로 파악되는데 업데이트할 사항이 없어서 더이상 릴리즈가 안되는건지 궁금해서 문의드립니다!
미해결
스프링과 JPA 기반 웹 애플리케이션 개발
강의와 똑같이 인텔리제이에서 spring io로 자바 11을 설정할려고 했으나 17이 최 하위이고 부트 버전도 아래같이 최하위가 3.대인데 2.대로 어떻게 맞추나요?
미해결
스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
이부분을 urltemplate으로 받아야하는데 array로 받네요 어떻게 하면 url로 받을 수 있을까요?
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@Autowired MemberRepository memberRepository; @Bean public MemberRepository memberRepository(){ //return new MemoryMemberRepository(); //return new JdbcMemberRepository(dataSource); return new JdbcMemberRepository(dataSource); } 이것이 자동으로 JdbcMemberRepository 주입되는 것이 memberRepository가 스프링 빈으로 등록이 되었고 이 등록된 것이 스프링 컨테이너에서 관리하기 때문인가요?
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
public Optional<Member> findById(Long id) { List<Member> result = jdbcTemplate.query("select * from member where id = ?", memberRowMapper()); return result.stream().findAny(); } 궁금한게 저기 sql문에서 ? 파라미터가 어떻게 입력이 되는거죠? public Optional<Member> findById(Long id) { List<Member> result = jdbcTemplate.query("select * from member where id = ?", memberRowMapper(),id); return result.stream().findAny(); } 밑에 방식으로 해야되는거 아닌가요?
미해결
코드로 배우는 React 19 with 스프링부트 API서버
강의에서 토큰을 보관하기에 보안에도 좋고 적절한 곳이 쿠키라고 말씀해주셨는데 보통 쿠키에 저장을 많이 하는편일까요? 내년 하반기에 크롬에서 쿠키차단예정을 하고 있다고 들어서 왠지 다른 대체제가 필요할거같은데 쿠키를 사용 못하게 된다면 보통 클라이언트에서는 로컬스토리지 이외에는 대체제가 없는지 궁금합니다.
해결됨
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원 서비스에 대한 테스트코드 중 일부인데 try { memberService.join(member2); fail(); } catch (IllegalStateException e) { assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } 여기서 fail()에 대한 제대로된 설명이 없이 넘어가셨는데 fail()이 무엇인가요?
미해결
스프링 부트 - 핵심 원리와 활용
순수 라이브러리 만들기에서 memory.jar를 외부 라이브러리로 만들때, 여기서 참조된 라이브러리가 jar파일에 포함되지 않을 것 같은데요. 만약 memory.jar안에서 사용된 라이브러리가 참조한 프로젝트에 없을때 참조 오류가 발생할텐데… memory.jar안에 참조로 사용된 라이브러리를 포함하려면 어떻게 해야 할까요? 저의 경우 프로젝트를 작은 단위로 나누어 프로젝트로 구성하고 autoconfiguration을 적용하려고 하는데 .. 참조하는 프로젝트에서 사용하지 않는 참조를 사용하는 경우가 다수 발생합니다. 좀더 자세한 상황을 첨부 합니다. memory.jar 에서 이 프로젝트에서만 사용하는 inflearn.jar를 참고하고 있습니다. 이 경우 memory.jar를 패키징하면 spring에서 사용하는 기술을 사용하지 않기 때문에 jar에 jar를 포함하지 못하고 fat jar로 빌드하지 않으면 inflearn.jar가 포함되지 않을 텐데요. 그렇게 되면 memory.jar를 참조하는 프로젝트에서 inflearn.jar가 없어 오류가 발생할 것 같습니다. 또한, 그 반대로 위 문제 때문에 fat jar로 패키징하는 경우 참조하는 쪽의 라이브러리와 같은 라이브러리로 사용으로 충돌이 발생하는 문제는 없는지요..? 죄송하게도 제가 두 경우를 충분하게 테스트 후 질문을 드리려고 했으나 샘플을 구성하고 여러가지 시도 후 질문 하려면 너무 많이 시간이 걸릴 것 같아 (제가 만들 샘플의 해답이 정답인지도 확인이 어려움) 먼저 질문 올리고 제 생각처럼 실제 오류가 발생하는지는 테스트 하고 문제를 해결할 수 있는지도 같이 보도록 하겠습니다. 감사합니다.
미해결
[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
https://www.inflearn.com/course/lecture?courseSlug=spring-boot-restful-web-services&unitId=39127&tab=community&category=questionDetail&q=222413 해당 강의에서의 posts create 부분에 500 interna error가 발생해서 문의드립니다 package com.example.restfulwebservice.bean; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import javax.persistence.*; @Entity @Data @NoArgsConstructor @AllArgsConstructor public class Post { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String description; // 게시물:사용자는 N:1 관계 // JsonIgnore 통해서 정보를 가져오지 않음 @ManyToOne(fetch = FetchType.LAZY) // FetchType.LAZY는 지연 로딩, 사용자 데이터를 필요한 시점에 가져옴. 즉시 로딩 안함 @JsonIgnore // 다른 엄한 JsonIgnore를 불러오는 바람에 N+1 문제가 너무 크게 발생함.... private User user; } Post.java package com.example.restfulwebservice.Controller; import com.example.restfulwebservice.bean.Post; import com.example.restfulwebservice.bean.User; import com.example.restfulwebservice.exception.UserNotFoundException; import com.example.restfulwebservice.exception.UsersAndCountResponse; import com.example.restfulwebservice.repository.PostRepository; import com.example.restfulwebservice.repository.UserRepository; import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder; import org.springframework.http.ResponseEntity; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.support.ServletUriComponentsBuilder; import javax.validation.Valid; import java.net.URI; import java.util.Date; import java.util.List; import java.util.Optional; import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; @RestController @RequestMapping("/jpa") public class UserJPAController { private UserRepository userRepository; private PostRepository postRepository; public UserJPAController(UserRepository userRepository){ this.userRepository = userRepository; } // /jpa/users @GetMapping("/users") public List<User> retrieveAllUsers(){ return userRepository.findAll(); } // ResponseEntity를 사옹한 정답 코드 @GetMapping("/usersAndCount") public ResponseEntity retrieveAllUsersAndCount(){ List<User> users = userRepository.findAll(); int count = users.size(); UsersAndCountResponse result = UsersAndCountResponse.builder() .count(users.isEmpty() ? 0 : users.size()) .users(users) .build(); EntityModel entityModel = EntityModel.of(result); WebMvcLinkBuilder linkTo = linkTo(methodOn(this.getClass()).retrieveAllUsers()); entityModel.add(linkTo.withSelfRel()); return ResponseEntity.ok(entityModel); } // jpa/users/{id} @GetMapping("/users/{id}") public ResponseEntity retrieveUsersById(@PathVariable int id){ Optional<User> user = userRepository.findById(id); if (!user.isPresent()){ throw new UserNotFoundException("id - " + id); } EntityModel entityModel = EntityModel.of(user.get()); WebMvcLinkBuilder lintTo = linkTo(methodOn(this.getClass()).retrieveAllUsers()); entityModel.add(lintTo.withRel("all-users")); return ResponseEntity.ok(entityModel); } @DeleteMapping("/users/{id}") public void deleteUser(@PathVariable int id){ userRepository.deleteById(id); } // /jpa/users @PostMapping("/users") public ResponseEntity<User> createUser(@Valid @RequestBody User user){ if(user.getJoinDate() == null) user.setJoinDate(new Date()); User savedUser = userRepository.save(user); // USER CREATED // /users/4 // 생성된 User의 URI를 저장 후 반환하기 URI location = ServletUriComponentsBuilder .fromCurrentRequest() .path("/{id}") .buildAndExpand(savedUser.getId()) .toUri(); return ResponseEntity.created(location).build(); } @GetMapping("/users/{id}/posts") public List<Post> retrieveAllPostByUser(@PathVariable int id){ Optional<User> user = userRepository.findById(id); if(!user.isPresent()){ throw new UserNotFoundException("id-" + id + " user not found"); } return user.get().getPosts(); } @PostMapping("/users/{id}/posts") public ResponseEntity<Post> createPost(@PathVariable int id, @RequestBody Post post) { Optional<User> userOptional = userRepository.findById(id); if (!userOptional.isPresent()) { throw new UserNotFoundException("id-" + id); } User user = userOptional.get(); post.setUser(user); postRepository.save(post); URI location = ServletUriComponentsBuilder .fromCurrentRequest() .path("/{id}") .buildAndExpand(post.getId()) .toUri(); return ResponseEntity.created(location).build(); } } UserJPAController.java 파일이고, user의 post 통한 생성과 get 통한 id로 해당 사용자 post 조회는 이상 없습니다