묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 시큐리티 OAuth2
로그아웃관련하여 질문드립니다!
안녕하세요!제가 강의를 듣고 직접 구현을 해보고 있는 중에 궁금한 점이 있습니다. 저는 인가서버에다가 로그인 페이지를 구성해서 아이디와 비밀번호를 입력하면 동의화면이 나와서 SCOPE 를 부여한 뒤 리소스 서버에 접근하는 로직의 흐름으로 구현을 생각해보고 있습니다.로그아웃을 하고나면 인가서버를 통해서 동의 받은 SCOPE도 다 날려서 인가서버 로그인화면으로 리다이렉트 하고 싶습니다. 제 바람과는 달리 계속 이미 인가가 된 상태가 되어서 마지막 강의 예제 코드를 기반으로 연구하고 있는데 127.0.0.1:8081/home 에서 로그아웃을 하고난 뒤 127.0.0.1:8081 로 리다이렉트 되도록 했는데 로그인링크를 누르면 127.0.0.1:9000/login 으로 가는 것이 아니라 바로 127.0.0.1:8081 로 이동해서 access token 버튼이 있는 화면으로 넘어갑니다. 제가 질문드리고 싶은 것은 로그아웃을 하고나서 로그인 하면 인가서버에 구현된 로그인 화면으로 이동해서 다시 로그인해서 동의화면을 받도록 하려면 어떤식으로 로직을 구성해야 할까요?ㅠ 몇 주 고민하다가 방법을 모르겠어서 질문드립니다.
-
미해결스프링 부트 웹 개발 입문 - 따라하며 배우기
DB Table 생성, 데이터 입력 문의
테이블 구조에 관해 몇가지 문의드립니다.coffee_menu_log 쿼리문이 없어 기존 테이블을 삭제(학습하면서 테스트한다고 무작위로 들어간 데이터도 삭제할 겸)했습니다. 그런데 테이블을 작성하면서 좀 아리송한 부분이 있어 문의드립니다. cust_info 테이블의 cust_id 컬럼 구조가 유니크한 큐로 유지되는 구조가 맞나요?그리고 order_list의 외래 키의 이름이 조금 달라 문의드립니다.이러한 질문을 드리는 이유는 sql 파일에 존재하는 테이블 수정의ALTER TABLE order_listADD CONSTRAINT fk_cust_idFOREIGN KEY(cust_id)REFERENCES cust_info(cust_id)에서키가 유니크한 키가 아닌 포린키로 지정되어 있어. 문의드립니다. 유니크한 키에서 이후 포린 키로 변경해야 하나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@SpringBootApplication 문제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]저 @SpringBootApplication 가 문제로 뜨는데 들어가보니 저런 상태인데 뭐가 문제일까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
javax.persistence가 import되지 않습니다
jpa강의를 듣던 도중 강의내용대로 따라했는데 오류가 발생하여 질문드립니다. build.gradle 의존성에 jpa 추가한 뒤 새로고침 했는데 javax.persistence.entity가 import 되지 않습니다. jakarta.persistence.entity는 가능하길래 import하여 진행해봤는데 오류가 나타납니다. https://drive.google.com/file/d/1p2qPm_9abHOmEqKz2oariH7S8iWla_k-/view?usp=sharing
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
라이브러리 실행이 안돼요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기 자료에 나와있는대로 했는데도 라이브러리 작동이 안되네요ㅠㅠ 매개변수가 비어있는 sql만 찍혀요! 뭐가 문제일까요?build.gradleplugins { id 'java' id 'org.springframework.boot' version '3.0.4' id 'io.spring.dependency-management' version '1.1.0' } group = 'jpabook' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { 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' implementation 'org.springframework.boot:spring-boot-devtools' testImplementation 'junit:junit:4.13.1' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6' } tasks.named('test') { useJUnitPlatform() }application.yml콘솔창 select next value for member_seqfindMember == member: true2023-03-22T18:50:10.129+09:00 DEBUG 61227 --- [ main] org.hibernate.SQL : insert into member (username, id) values (?, ?)2023-03-22T18:50:10.157+09:00 INFO 61227 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'2023-03-22T18:50:10.157+09:00 TRACE 61227 --- [ionShutdownHook] o.h.type.spi.TypeConfiguration$Scope : Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@d3cce46] for TypeConfiguration2023-03-22T18:50:10.158+09:00 DEBUG 61227 --- [ionShutdownHook] o.h.type.spi.TypeConfiguration$Scope : Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@4462a887] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@d3cce46]2023-03-22T18:50:10.160+09:00 INFO 61227 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...2023-03-22T18:50:10.178+09:00 INFO 61227 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.Process finished with exit code 0
-
미해결스프링 시큐리티 OAuth2
사용자 관리에 대해서 문의드립니다.
강의에서는 네이버나 구글을 통해 로그인을 진행하면 access token 을 받고 이를 통해 사용자정보를 받아오면 이를 인증완료로 보는 것 같은데요.일반적으로는 받아온 사용자정보를 가지고 OAuth Client 자체 DB 에 사용자마스터를 등록하고 별도의 사용자 식별키 관리를 해야하지 않는지요? 이러한 처리가 생략되어 있는 것 같은데 이 부분이 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Order Entity Cascade 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "delivery_id") private Delivery delivery;Order Entity의 코드입니다. 현재 Order와 Delivery의 관계에서 연관관계의 주인은 Order입니다. 그렇다면 Order에서 delivery의 값을 변경하면 연관관계의 주인이기 때문에 반영이 된다고 알고 있습니다. 그래서 cascade를 굳이 써야하나 고민을 하고있었습니다. 제가 생각해낸 이유는 연관관계의 주인이여서 Order에서 delivery의 값을 변경이 가능한 것은 객체 관점(delivery에 값이 입력되기만 함 영속성 컨텍스트에 저장 X)이고 cascade는 db관점에서의 접근이므로 cascade를 작성해 줘야 묶여서 영속성 컨텍스트로 넘어간다(cascade를 작성하지 않으면 order를 persist했을 경우 delivery에 값은 있지만 영속성컨텍스트로 넘겨주지않음). 입니다. 제가 생각한 방법이 맞는지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
객체의 의존성 주입 할때 주인 테이블에 대한 궁금증
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]안녕하세요. 제가 JPA 기본편을 들을 시간이 없이 실무에 바로 적용해보고자 JPA 활용을 먼저 듣게 되었습니다.그래서 의존성 주입에 대한 기본편 내용을 숙지하지 못해서 질문을 드립니다. 강사님께서 테이블 간의 FK지정 시 다 대 1 관계에서 무조건 다의 테이블에 Joincolumn을 엮고 1의 테이블에는 mappedby를 통해서 이 둘을 엮는다고 말씀하셨습니다.하지만, 무조건 적으로 다의 테이블에서만 이를 시행해야하나요? 그 반대로 할 수는 없는건가요???
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
localhost:8080 로그인 Unauthorized
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]localhost:8080 접속시 로그인창이 나오고 취소시 Unauthorized이런 오류가 나오네요 build.gradleapplicaton.properties 해결책을 알려주시면 감사하겠습니다 우선 프로젝트를 다시 생성해보겠습니다
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
프로젝트 만들 때 선택사항
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.스프링 부트 프로젝트 만들 때 Packaging은 jar, war 둘중 무엇을 선택해야 하나요?java 버전은 11버전으로 진행하면 될까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
SpringConfig import문제
강의영상에서는 MemberService가 제대로 import 되고MemberService의 메서드도 불이 잘들어가있는데왜 import가 안되는지 모르겠습니다.앱실행하면 구동은 잘됩니다
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
2분 23초 단축키 보는 방법에 대해 질문드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요강의 중간 중간에 아래에 단축키를 보여주시는 것으로 이해하고 있습니다.1번째 질문입니다.2분 23초 화면 아래에Extend Selection via 와 문자들이 여러가지 있는데읽는 법을 모르겠습니다구글링해도 알 수 없어서 질문드립니다https://www.google.com/search?q=extend+selection+via&sxsrf=AJOqlzUlb-H_5m0gOhEFarRhon8t-0fufw%3A1679410552822&ei=eMUZZM_fMcGRseMPmJm38Ag&ved=0ahUKEwjP-7rro-39AhXBSGwGHZjMDY4Q4dUDCA8&uact=5&oq=extend+selection+via&gs_lcp=Cgxnd3Mtd2l6LXNlcnAQAzIICCEQoAEQwwQ6CAgAEAcQHhATOhAIABCABBAUEIcCELEDEIMBOgoIABCABBAUEIcCOgsIABCABBCxAxCDAToECAAQAzoUCC4QgAQQsQMQgwEQxwEQ0QMQ1AI6EQguEIAEELEDEIMBEMcBENEDOgUIABCABDoGCAAQBxAeOgcIABANEIAEOggIABAHEB4QCjoICAAQBxAeEA86CAgAEAgQBxAeOgUIABCiBDoKCCEQoAEQwwQQCkoECEEYAFAAWMAbYPseaABwAHgAgAHLAYgBhBOSAQYwLjE3LjGYAQCgAQHAAQE&sclient=gws-wiz-serp 2번째 질문입니다3분 47초에서 화면 아래에 Save All via 라고 적혀있고 그 다음에 특수문자가 적혀있는데, 해석 방법에 대해 질문드립니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
로드맵에 몇번째 강의까지 들어야지 개인 프로젝트를 할 수 있을까요?
안녕하세요파이썬으로 알고리즘만 공부하다가, 백엔드 개발자가 되기 위해 스프링을 배워보고 싶어서 영한님 로드맵을 시작했습니다.기본적인 자바 공부를 하고 첫번째 로드맵 강의를 다 끝냈는데, 혹시 간단한 개인 or 협업 프로젝트를 할정도의 실력을 갖추려면 몇번째 강의까지 듣고 시작하는게 좋을까요? 강의를 들으면서 프로젝트도 해보고 싶은 욕구가 강하게 들어서 꼭 해보고 싶습니다.그런데 무작정 프로젝트를 시작하기에는, 첫번째 강의를 다 들었음에도 불구하고 아무것도 모른다는 느낌이 들어서 선뜻 손을 대기가 어렵네요..막상 게시판 하나 만들어 보려고 구글링을 하면서 봐도 config controller service repository를 어떻게 작성해야 할지도 모르겠구요답변 주시면 감사하겠습니다..!
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
JWT Token SigningKey 관련 질문
안녕하세요. 강의를 수강하던 중 이해하기 힘든 현상을 발견되어 이렇게 질문드립니다.Jwt는 SigningKey로 복호화가 가능하다면, 유효한 토큰이다.(유효한 토큰이다란 기준이 여러 개 있습니다만) 라고 알고 있는데요. 아래와 같은 현상을 발견하게되서 질문하게 되었습니다.(현재 Gateway server - token.secret = A)(현재 User service - token.secret = A)1.User-service 회원생성2.User-service 로그인 (응답에서 jwt토큰 복사)로그인 시 User-service의 token.secret을 SigningKey로 jwt 토큰 발급3.Gateway의 AuthorizationHeaderFilter를 통과하는 user-service/actuator/health 호출 (response, 200)여기까지는 정상입니다만4.ecommerce.yml의 token.secret 변경 및 커밋5.Gateway의 /refresh 호출액츄에이터에 의한 token.secret 변경 (현재 Gateway server - token.secret = B)(현재 User service - token.secret = A)(현재 JWT 토큰의 SigningKey = A)6.Gateway의 AuthorizationHeaderFilter를 통과하는 user-service/actuator/health 호출 (response, 200) 여기가 질문 포인트입니다. AuthorizationHeaderFilter의 isJwtValid의 코드를 보면subject = Jwts.parser().setSigningKey(env.getProperty("token.secret")) .parseClaimsJws(jwt).getBody() .getSubject();이런 구문이 있습니다. Jwt 생성 당시의 Siginingkey랑 다른 signingkey로 복호화하면 오류가 나면서 인가에 실패하는 것을 기대했습니다. 하지만 왜 정상적으로 200을 반환하는지 이해가 잘 되지 않습니다. (Gateway의 token.secret은 B로 변경됨을 로그로 확인했습니다. )
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
test.mv.db가 생성되지 않음
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]
-
미해결스프링 부트 - 핵심 원리와 활용
한 레포에서 여러 프로젝트를 구성 할때, DB 엔티티(entity) 공유 방법이 궁금합니다.
안녕하세요, 프로젝트 폴더&파일 구조에 대해 문의드리고자 글을 남기게 되었습니다.1개 레포지토리에2개(A, B) 프로젝트가 있습니다각각 스프링부트 프로젝트 입니다A 는 API Rest 서버 이고B 는 크론 서비스로 구성된 서버 입니다A와 B 간 통신은 없습니다A 에서 요청을 받으면, DB 에 요청을 저장하고B 가 주기적으로 DB 를 탐색하여 미 처리된 요청을 실제 수행하고자 합니다예를 들어, 메일 발송 또는 영수증 (pdf) 생성 요청을 A 서버가 받아서 DB 에 저장하면,해당 테이블을 B 가 주기적으로 확인하여 작업을 실제 수행하고자 합니다.B 서비스에서 db 엔티티를 어떻게 이용하는게 좋은 구성인지 궁금합니다.제가 생각해본 바는 3가지 입니다1. entity 만 독립된 레포로 구성하고, submodule 로 각각 참조하도록한다.- 1개 레포 쓰려고 구성했는데 entity 만 독립 레포로 분리한다는 점이 불편하게 다가옵니다, 그리고 submodule 구성 자체도 거부감이 들었습니다2. A 에 주로 entity 를 작성하고, 필요한 부분만 B 에 일부 복사하여 사용한다.- 구성하기는 편하지만 관리가 잘 될까, 변경점을 잘 따라갈 수 있을까 걱정됩니다3. 프로젝트 A 와 B 를 합치고, 실행을 각각한다.Repo|___ A|___ src / main / kotlin / com / test / api / entity|___ src / main / kotlin / com / test / api / service|___ src / main / kotlin / com / test / cron / service- api 서버와 cron 서버 jar 자체를 분리하고 싶엇는데, 제가 찾아본 바로는 gradle 관련 포럼에서 이렇게 구성하는 것을 비추천 한다는 글들을 보았습니다, 구체적으로 찾아보진 못한 상태입니다*현재구성)Repo|___ A|___ src / main / kotlin / com / test / api / entity|___ src / main / kotlin / com / test / api / service| ...|___ B|___ src / main / kotlin / com / test / cron / service위와 같은 환경에서 권장되는 방법이 어떤 것인지 궁금합니다.읽어주셔서 감사합니다!
-
해결됨토비의 스프링 부트 - 이해와 원리
@ComponentScan과 @Configuration
안녕하세요! 좋은 강의 너무 감사하고 잘 듣고 있습니다.이번 수업을 듣던 중에 @ComponentScan 애노테이션과 @Configuration 애노테이션을 함께 사용하는 이유가 궁금해서 찾아봤습니다.찾아본 결과는 다음과 같습니다.@Configuration 애노테이션이 없는 경우 Spring에서 구성정보를 제공하지 않는다는 것을 의미하기 때문에 @ComponentScan이 스캔할 패키지 내에서 Bean으로 등록할 클래스를 찾지 않는다.저는 @ComponentScan이 해당 애노테이션이 달린 패키지부터 하위 패키지까지 @Component 애노테이션이 달린 모든 클래스들을 빈으로 등록해주는 역할을 한다고 생각했는데, 위가 아니라 @ComponentScan이 @Component 애노테이션이 달린 모든 클래스들을 찾고 @Configuration이 해당 클래스들을 빈으로 등록해주기 때문에 같이 사용한다로 이해해도 될까요?
-
미해결스프링 시큐리티
접근이 거부되었습니다. 예외가 발생합니다.
5) 웹 기반 인가처리 DB 연동 - FilterInvocationSecurityMetadataSource (2) 강의 관련 질문입니다. 참고로, 현재 SecurityConfig 파일이 파일명으로 구분해서 Ajax 인증용과 폼인증 두개 입니다.문제는 로그인까지 성공하고 /mypage 로 들어가면 접근 거부 예외가 생깁니다.'org.springframework.security.access.AccessDeniedException: 접근이 거부되었습니다.' SecurityConfig , AjaxSecurityConfig 설정파일명으로 구분했고 마지막에설정 코드도 올렸지만 authenticationManager 같은 Bean 메서드들도 이름으로 구분했습니다. 사용자정보, 권한정보등 제대로 갖고 왔는데 어디가 잘못된건지 잘모르겠네요..혹시 시큐리티 설정파일에서 서비스 클래스 두가지를 사용해서 그런지 의심도 되고 그렇네요..private final SecurityResourceService securityResourceService;private final UserDetailsService userDetailsService; 아래에 도움이 될까 해서 디버깅화면 캡쳐해서 올렸습니다.그리고 코드는 아래 깃허브에 올렸습니다.walnutnamu/corespringsecurity (github.com)감사합니다. AbstractSecurityInterceptor 클래스UrlFilterInvocationSecurityMetadataSource 클래스 RoleVoter 클래스ExceptionTranslationFilter 클래스FormAccessDeniedHandler 클래스AccessDeniedException 클래스 웹페이지에는 흰 배경만 나타나고 302 코드를 반환하네요.Request URL:http://localhost:8080/mypageRequest Method:GETStatus Code:302Remote Address:[::1]:8080Referrer Policy:strict-origin-when-cross-orig 시큐리티 설정파일 @Configuration@RequiredArgsConstructor@Order(1)public class SecurityConfig {@Beanpublic WebSecurityCustomizer configure() {return (web) -> web.ignoring().mvcMatchers("/css/**","/js/**","/error");}private final AuthenticationConfiguration authenticationConfiguration;private final AuthenticationDetailsSource authenticationDetailsSource;private final AuthenticationSuccessHandler formAuthenticationSuccessHandler;private final AuthenticationFailureHandler formAuthenticationFailureHandler;private final SecurityResourceService securityResourceService;private final UserDetailsService userDetailsService;public PasswordEncoder passwordEncoder() {return PasswordEncoderFactories.createDelegatingPasswordEncoder();}@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/", "/users", "user/login/**", "/login*").permitAll().antMatchers("/mypage").hasRole("USER").antMatchers("/messages").hasRole("MANAGER").antMatchers("/config").hasRole("ADMIN").anyRequest().authenticated().and().exceptionHandling()//.accessDeniedPage("/denied").accessDeniedHandler(accessDeniedHandler()).and().addFilterBefore(customFilterSecurityInterceptor(), FilterSecurityInterceptor.class);http.formLogin().loginPage("/login").loginProcessingUrl("/login_proc").authenticationDetailsSource(authenticationDetailsSource).defaultSuccessUrl("/").successHandler(formAuthenticationSuccessHandler).failureHandler(formAuthenticationFailureHandler).permitAll();//http.csrf().disable();return http.build();}public FormAuthenticationProvider formAuthenticationProvider() {return new FormAuthenticationProvider(userDetailsService, passwordEncoder());}@Beanpublic AccessDeniedHandler accessDeniedHandler(){FormAccessDeniedHandler accessDeniedHandler = new FormAccessDeniedHandler();accessDeniedHandler.setErrorPage("/denied");return accessDeniedHandler;}@Beanpublic AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {ProviderManager authenticationManager = (ProviderManager) authenticationConfiguration.getAuthenticationManager();authenticationManager.getProviders().add(formAuthenticationProvider());return authenticationManager;}@Beanpublic FilterSecurityInterceptor customFilterSecurityInterceptor() throws Exception {FilterSecurityInterceptor filterSecurityInterceptor = new FilterSecurityInterceptor();filterSecurityInterceptor.setSecurityMetadataSource(urlFilterInvocationSecurityMetadataSource());filterSecurityInterceptor.setAccessDecisionManager(affirmativeBased());filterSecurityInterceptor.setAuthenticationManager(authenticationManager(authenticationConfiguration));return filterSecurityInterceptor;}public AccessDecisionManager affirmativeBased() {AffirmativeBased affirmativeBased = new AffirmativeBased(getAccessDecisionVoters());return affirmativeBased;}private List<AccessDecisionVoter<?>> getAccessDecisionVoters() {return Arrays.asList(new RoleVoter());}/*** 자원/권한 정보를 저장하고 있는 클래스를 빈으로 생성* @return* @throws Exception*/@Beanpublic FilterInvocationSecurityMetadataSource urlFilterInvocationSecurityMetadataSource() throws Exception {return new UrlFilterInvocationSecurityMetadataSource(urlResourcesMapFactoryBean().getObject());}private UrlResourcesMapFactoryBean urlResourcesMapFactoryBean() {UrlResourcesMapFactoryBean urlResourcesMapFactoryBean = new UrlResourcesMapFactoryBean();urlResourcesMapFactoryBean.setSecurityResourceService(securityResourceService);return urlResourcesMapFactoryBean;}}
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
헤티오스 빈 문제
Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed 현재 스프링부트 2.7.9쓰고있고 어떻게 해결해야할까요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
libs후 localhost:8080 안됨
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.libs 폴더에 jar파일 있는 것까지 했는데localhost:8080가면 안됩니다..