inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

커넥션을 사용한다는 것

미해결

스프링 DB 2편 - 데이터 접근 활용 기술

안녕하세요. 강의 자료중에, " MemberRepository는 JPA를 통해 회원을 저장하는데, 이때 JPA는 트랜잭션이 시작된 con1을 사용해서 회원을 저장한다 " 라고 되어있는데요. 이 부분에 대해 영한님께서 "em.persist()를 호출할때 내부적으로 JPA는 트랜잭션이 시작된 con1을 사용한다" 고 하셨는데, em.persist()를 호출할때, 실제 데이터베이스에 커밋은 아직 하지 않지만 con1을 사용해서 회원을 데이터베이스에 저장하는것인가요? "LogRepository도 트랜잭션C와 관련된 con2를 사용한다" 라고 강의자료에 나와있는 부분도, 위 내용과 동일한걸까요? con1과, con2를 사용한다는 개념이 어떤것을 의미하는지 궁금해서 질문드립니다. 감사합니다.

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
오리쉐리 댓글 2 좋아요 0 조회수 129

CSR 자바스크립트

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

"자바스크립트 링크"가 <script> 태그에 있는 경로를 말하는 거고 클라이언트가 그 js 파일을 서버에 요청하는게 "자바스크립트 요청"이 되는건가요? 서버가 그 파일을 전달하면 클라이언트가 필요한 데이터를 다시 요청한 후에 파일을 완성해서 렌더링하는 과정이 맞는지 궁금해요

  • spring
  • mvc
jungmin257 댓글 1 좋아요 0 조회수 115

침몰하는 타이타닉(그리디) 문제 질문

미해결

파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)

안녕하세요! 강의 잘 듣고 있습니다 공부를 하다가 오래 고민해도 이해가 안되는 부분이 생겨서 질문 처음 남겨봅니다~ 침몰하는 타이타닉 (그리디) 문제에서 예를 들어 무게가 100 90 80 80 80 80 40 30 20 10 인 10명의 사람들을 무게 한도가 140인 구명보트에 태울때 강사님 풀이 대로면 100인 사람과 10 인 사람을 태우고 90 인 사람과 20인 사람을 태우는 방식으로 시작해서 (100,10) (90,20) (80,30) (80, 40) (80) (80) 이렇게 6개의 구명보트에 사람을 태우는데 저는 100인 사람과 40인 사람을 먼저 태워야한다고 생각을 했습니다. 뭔가 강사님 풀이대로 100인 사람과 10 인 사람을 먼저 태우면 80 인 사람이 혼자 타게 되는데 100이 40과 함께 타면 80 인 사람이 10 인 사람과 같이 탈 수 있으니 80은 혼자 타지 않아도 되서 cnt 가 최소가 되는게 아닌가 생각했습니다. ( 즉 100 일떄 140 - 100 은 40 이니 40보다 작은 수 중에서 가장 큰 값을 구하는 방식으로 풀었습니다 이중 반복문을 사용합니다 (100, 40) (90, 20) (80, 20) (80, 10) (80) (80) ) 제가 제 방식, 강사님 방식으로 5시간정도 시뮬레이션 해 본 바로는 결국 결국 cnt는 같았습니다 그런데 왜 같은지 논리적으로는 이해할 수가 없어요.. ㅠㅠ 논리적으로 왜 같은지 혹시 설명해주실 수 있으실까요..

  • python
  • 코딩-테스트
이자영 댓글 1 좋아요 0 조회수 126

생성자 함수를 클래스 함수로 변경 하고 this 오류 관련

미해결

인터랙티브 웹 개발 제대로 시작하기

init() { window.addEventListener('scroll', () => { this.scrollRunHandler(); this.scrollPosition(this.mainElem); }); } scrollRunHandler() { clearTimeout(this.scrollState); if (!this.scrollState) { this.mainElem.classList.add('running'); } this.scrollState = setTimeout(() => { this.scrollState = false; this.mainElem.classList.remove('running'); }, 500); } scrollPosition = (elem) => { if (elem.lastScrollTop > window.scrollY) { // 스크롤을 아래로 this.mainElem.dataset.direction = 'backward'; } else { // 스크롤 위로 this.mainElem.dataset.direction = 'forward'; } elem.lastScrollTop = window.scrollY; } 생성자 함수를 클래스 함수로 변경하면서 this가 character를 가리켜야 되는데 window를 가리키는 문제가 생겨서 변수를 그냥 넣어줘서 작동은 하는데 이렇게 하는게 맞는지 궁금합니다.

  • HTML/CSS
  • javascript
  • 인터랙티브-웹
samkookji12 댓글 1 좋아요 0 조회수 184

섹션7: gson 오류

해결됨

코드로 배우는 React 19 with 스프링부트 API서버

강의 설명에 따라 build.gradle에 implementation ' com.google .code.gson:gson:2.10.1' 입력 후 이 오류 때문에 강의를 더 이상 진행할 수가 없습니다. 오류로 인해 ./gradlew clean build --refresh-dependencies 터미널에도 실행해보고 configurations.all { resolutionStrategy { force ' com.google .code.gson:gson:2.10.1' } } 이 코드도 추가해서 해결해 보려 했으나, 오류가 해결되지 않았습니다. 도움 부탁드립니다.

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
댓글 2 좋아요 0 조회수 231

쿼리 질문드립니다!

해결됨

[7일완성]생각하는 데이터베이스모델링

안녕하세요 선생님. "26_학사관리시스템(SQL실습3)"에 있는 쿼리 중에 조인과 서브쿼리 중 대체적으로 어떤 방법이 성능에 더 좋은지 궁금해서 질문드립니다. 두 가지 질의에 대해서 3가지 방법으로 조인과 서브쿼리를 섞어보았는데 조언 부탁드립니다. 감사합니다. -- 교양엉어 과목을 수강 신청한 학생의 이름 -- 1. JOIN 2번 select s. student_name from student_course sc JOIN student s on sc. student_id = s. student_id JOIN course c on sc. course_code = c. course_code where c. course_name = '교양 영어' ; -- 2. JOIN 1번, where 절에 subQuery 1번 select s. student_name from student_course sc JOIN student s on sc. student_id = s. student_id where course_code = ( select course_code from course where course_name = '교양 영어' ) ; -- 3. where 절에 subQuery 2번 select s. student_name from student s where s. student_id in ( select student_id from student_course where course_code = ( select course_code from course where course_name = '교양 영어' )) ; -- 가교수의 과목을 수강신청한 학생수를 출력 -- 1. JOIN 2번 select count ( student_id ) as cnt -- count(student_id) as cnt from student_course sc JOIN course c on sc. course_code = c. course_code JOIN professor p on c. professor_code = p. professor_code where p. professor_name = '가교수' ; -- 2. JOIN 1번, WHERE 절에 subQuery 1번 select count (sc. student_id ) as cnt from student_course sc where course_code in ( select c. course_code from course c JOIN professor p on c. professor_code = p. professor_code where p. professor_name = '가교수' ) ; -- 3. where 절에 subQuery 2번 select count (sc. student_id ) as cnt from student_course sc where sc. course_code in ( select c. course_code from course c where professor_code = ( select professor_code from professor p where professor_name = '가교수' )) ;

  • dbms/rdbms
  • ERD
  • backend
  • sql
맛땅 댓글 2 좋아요 0 조회수 175

뮤직비디오 id 1 채점 실패

미해결

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

해당 케이스에서 DVD 최소 크기가 2이면, DVD의 개수는 [1, 1], [1, 1], [1] 총 3개가 되서 결과가 틀어야 하는게 아닌가 싶습니다! 제가 짠 코드로는 id 1 채점이 통과되지 않아 질문드립니다. import java.util.Scanner; public class Main { public static int solution(int n, int m, int[] arr) { int answer = 10_001; int lt = 0; int rt = 0; for (int x : arr) { rt += x; } while (lt <= rt) { int mid = (lt + rt) / 2; int midValue = mid + 1; int sum = 0; int cnt = 1; for (int i = 0; i < n; i++) { if (sum + arr[i] > midValue) { cnt++; sum = arr[i]; } else { sum += arr[i]; } } if (cnt > m) { lt = mid + 1; } else { rt = mid - 1; } if (cnt == m && answer > midValue) { answer = midValue; } } return answer; } public static void main(String[] args) { Scanner kb = new Scanner(System.in); int n = kb.nextInt(); int m = kb.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = kb.nextInt(); } System.out.print(solution(n, m, arr)); } }

  • java
  • 코딩-테스트
화이팅 댓글 1 좋아요 0 조회수 105

CoroutineDispatcher(Default, IO)의 limitedParallelism 관련 질문

해결됨

코틀린 코루틴 완전 정복

안녕하세요. 강사님 코루틴 강의를 1번 완강하고, 최근에는 전체적으로 강의를 복습을 하고 있습니다. 복습을 하다가 CoroutineDispatcher 의 limitedParallelism 에 대해 몇가지 궁금한 점이 생겨서 질문을 남기게 됐습니다. Dispatchers.Default 관련 Dispatchers.Default 의 스레드풀 수를 넘어서는 숫자 혹은 스레드풀 수에 딱 맞게 스레드 수를 지정하여 limitedParallelism 함수를 실행하는 경우, Dispatchers.Default 의 모든 스레드들은 제가 지정한 해당 작업을 처리하기 위해 계속 작업을 하고, 해당 작업이 시작된 이후에 Dispatchers.Default 로 지정하여 실행한 코루틴 작업들은 제가 지정한 작업이 끝나기 전까지는 모두 대기하게 되는 것인가요?? 예를 들어, CPU 코어가 4개인 컴퓨터라면 Dispatchers.Default 의 스레드 풀에 들어있는 스레드 수는 4개가 될테고, 해당 상황에서 Dispatchers.Default.limitedParallelism(4) 혹은 스레드가 몇개 있는지 몰라 Dispatchers.Default.limitedParallelism(8) 이렇게 지정하는 경우에 아래 코드를 기준으로 하면 제가 먼저 시킨 작업( superCpuIntensiveTask() )이 끝나기 전에는 lightCpuIntensiveTask() 는 실행되지 않는 것일까요? (※ 멀티 스레드 작업이기 때문에 아래의 lightCpuIntensiveTask() 가 먼저 실행될 가능성도 있지만 아주 재수가 나쁘게 superCpuIntensiveTask() 가 먼저 실행이 된다면 어떻게 되는지가 궁금합니다) // CPU 코어가 4개인 컴퓨터 fun main() = runBlocking { launch(Dispatchers.Default.limitedParallelism(8)) { superCpuIntensiveTask() } launch(Dispatchers.Default) { lightCpuIntensiveTask() } println("Done") } 1번과 비슷한 질문입니다. CPU 코어가 4개인 컴퓨터에서 Dispatchers.Default.limitedParallelism 를 여러번 사용한 경우, 코드상으로 보면 사용해야 하는 스레드의 수가 전체 스레드풀 수를 넘어서는 숫자가 되는데 이 경우에는 어떻게 스레드를 나눠서 사용하는 걸까요 ? // CPU 코어가 4개인 컴퓨터 fun main() = runBlocking { launch(Dispatchers.Default.limitedParallelism(3)) { superCpuIntensiveTask() } launch(Dispatchers.Default.limitedParallelism(3)) { superCpuIntensiveTask2() } launch(Dispatchers.Default.limitedParallelism(2)) { CpuIntensiveTask() } println("Done") } Dispatchers.IO 관련 Dispatchers.IO.limitedParallelism 를 사용하면 새로운 Thread 집합을 만든다고 말씀해주셨습니다. 그림에서 표현해주신 것처럼 기존에는 개별로 존재하는 Thread들을 새로 그룹으로 묶어낸다고 이해를 하면 되는 것일까요 ?? Dispatchers.IO.limitedParallelism 으로 묶여있던 Thread들은 해당 코루틴이 끝나면 다시 그룹이 풀리는 것일까요 ?? 만약에 Dispatchers.IO.limitedParallelism 를 많이 사용하여 이미 기존의 스레드들 모두가 집합으로 구성이 되어있는 경우에는 신규로 집합을 만들 수가 없는 경우에는 해당 Dispatchers.IO.limitedParallelism 요청이 어떻게 되는지 궁금합니다. limitedParallelism 의 Thread 수 지정 해당 코드와 같이 Dispatchers.Default.limitedParallelism(4) Thread 수를 지정해야 할때, 어떤 기준으로 어떻게 Thread 수를 지정해야 좋을까요 ?? 강사님만의 팁이 있으시면 공유가 가능하실까요?? 어떻게 수를 정해서 넣어야 할지 감이 잘 잡히지 않습니다. 😢 1번과 관련된 질문입니다. Thread 수를 지정할 때 현재 Thread Pool에 존재하거나 남아있는 쓰레드가 몇개인지 충분히 고려를 하면서 코드를 짜야할까요 ?? 실수로 스레드 풀의 전체 Thread 수를 넘어선 요청을 하게 되면 어떻게 되는지 궁금합니다. 질문이 많아서 정말 죄송합니다. 🙇‍♂ 🙇‍♂ 🙇‍♂

  • android
  • kotlin
  • coroutine
  • kotlinx.coroutines
  • android-coroutine
denia park 댓글 1 좋아요 1 조회수 266

강의 내용 PPT 제공

해결됨

[코드캠프] 훈훈한 Javascript

혹시 이 강의에서 쓴 ppt나 pdf파일은 제공 못받을까요 ..?

  • javascript
윤성호 댓글 2 좋아요 0 조회수 202

예제폴더의 경로와 영상의 경로가 너무나도 다릅니다

미해결

그림으로 배우는 쿠버네티스(v1.35)

질문 답변을 제공하지만, 강의 비용에는 Q&A는 포함되어 있지 않습니다. 다만 실습이 안되거나, 잘못된 내용의 경우는 알려주시면 가능한 빠르게 조치하겠습니다! [질문 전 답변] 1. 강의에서 다룬 내용과 관련된 질문인가요? [예 | 아니요] 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? [예 | 아니요] 3. 질문 잘하기 법을 읽어보셨나요? [예 | 아니요] (https://www.inflearn.com/blogs/1719) 4. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 5. vagrant up 에서 발생하는 문제는 주로 호스트 시스템(Windows, MacOS)과 연관된 다양한 조건에 의해 발생합니다. 따라서 이를 모두 제가 파악할 수 없어서 해결이 어렵습니다. vagrant up 으로 진행이 어렵다면 제공해 드리는 가상 머신(VM) 이미지를 import해서 진행하시기 바랍니다. ( https://www.inflearn.com/questions/992407/comment/281901 ) [질문 하기]

  • docker
  • kubernetes
hyungsub hwang 댓글 2 좋아요 0 조회수 255

dart run build_runner build 명령어 오류

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

dart run build_runner build 명령어를 Terminal에서 실행하면, "dart : 'dart' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오."라는 오류가 발생하며 실행되지 않습니다. 어떻게 해결할 수 있을까요?

  • flutter
  • 클론코딩
audwnsdl2 댓글 2 좋아요 0 조회수 257

바닥 4분에 어떤 부분을 선택해야 할지 모르겠어요!

해결됨

친절한 블렌더 - [LV.2] 모델링 연습

4분 40초 부분에 기존 다른 2개의 강의에서도 중요하게 다뤘다고 하는 그 부분이요! 제가 한글버전에 선생님처럼 원모양이 아닌 목록(?)처럼 떠서 뭘 누르는지 모르겠더라고요 . 혹시 한글로 뭘 눌러야하는지 알려주실 수 있을까요?

  • blender
  • 3d
  • 3d-rendering
  • 3d-modeling
황미주 댓글 2 좋아요 1 조회수 99

section12에서 존재하지 않는다는 얼럿이 뜹니다.

해결됨

한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지

강의 재밌게 잘 들었습니다! 다름아니오라 감정 일기장 실습 중 section12에서 궁금한 것이 생겼습니다 생성된 일기를 삭제하면 "일기를 정말 삭제할까요? 다시 복구되지 않아요!" 컨펌 다이얼로그가 나타나는 건 잘됩니다. 근데 ok 버튼을 클릭하면 바로 home 페이지로 이동하지 않고 "존재하지 않는 일기입니다."라는 얼럿 다이얼로그가 그 다음으로 뜨고나서 ok 버튼을 클릭해야 home 페이지로 이동하게 됩니다. 올려주신 정환님의 깃헙 소스 파일을 다운받아 실행시키면 이런 문제는 발생하지 않아서 어디를 고쳐야할지 막막합니다. 제 소스 코드는 링크 에 달아두었습니다. 답변해주셔서 감사합니다!

  • javascript
  • react
  • node.js
sw.sub 댓글 3 좋아요 0 조회수 132

깃허브 sync 오류

해결됨

디자인 시스템 with 피그마

안녕하세요!! 현재 핸드오프 절차중인데, 혹시 이 부분에서 어떤 솔루션이 있을 수 있을까요?

  • figma
  • figma-tokens
  • 디자인-시스템
  • 아토믹-디자인
  • 프로덕트디자인
코지 휴먼즈 클럽 댓글 2 좋아요 1 조회수 218

싱글톤 매니저와 씬

해결됨

[Unity] 함께 만들어가는 방치형 게임 개발

만약에 로딩씬에서 온갖 싱글턴 매니저를 초기화한 후 메인씬으로 넘어가는 로직을 만든 경우, 매니저 오브젝트들이 전부 로딩씬에 배치해서 메인씬에서 개발할때는 Hierarchy 창에 아무것도 안보이고, 개발 모드에 들어가도 로딩씬을 거치지 않으니 아무 매니저도 안생길것 같은데, 이럴때는 어떻게 해결할수 있나요?

  • C#
  • unity
  • firebase
  • 게임기획
  • json-parsing
무자본 댓글 2 좋아요 0 조회수 133

강의 자료 중 오탈자 제보

해결됨

쉽게 설명하는 AWS 기초 강의

800명이 넘는 AWS 강의실 오픈채팅방 에 오시면 더 좋은 답변을 실시간으로 받아보실 수 있습니다. 질문내용은 상세하고 자세하게 부탁드립니다. 예시 : "Amazon EC2의 t2.micro 타입으로 Amazon Linux 2023타입으로 퍼브릭 서브넷에 프로비전 했습니다. 키페어와 같이 프로비전해서 SSH로 접속하고 싶은데 접속 요청시 Timeout이 발생합니다. 어디를 확인하면 될까요?" SQS Demo 강의 자료 중 userdata 파일의 s3 cp 커맨드라인에 &&가 빠져있어서 에러나네요

  • aws
  • aws-vpc
  • aws-rds
  • aws-ec2
  • aws-s3
최재엽 댓글 2 좋아요 0 조회수 172

컨테이너 클래스 IntArray 과제 피드백 요청

미해결

홍정모의 따라하며 배우는 C++

안녕하세요 10.6 컨테이너 클래스 강의에 IntArray 구현해보았는데 피드백 요청드립니다. 잘못된 곳이라던가 좀 더 공부가 필요한 부분 지적해주시면 너무 감사드립니다. #include <iostream> #include <initializer_list> class IntArray { private: int m_length = 0; int* m_data = nullptr; public: IntArray(const std::initializer_list<int> number) { m_length = number.size(); m_data = new int[m_length]; int count = 0; for (auto& arr : number) { if (count < m_length) { m_data[count] = arr; ++count; } } } IntArray(const IntArray& copy) { m_length = copy.m_length; m_data = new int[m_length]; for (int i = 0; i < m_length; i++) m_data[i] = copy.m_data[i]; std::cout << "복사 생성자 호출" << std::endl; } ~IntArray() { delete[] m_data; std::cout << "메모리 해제" << std::endl; } void reset() { if (m_data != nullptr) { m_length = 0; delete[] m_data; m_data = nullptr; } } void resize(const int& size) { int* temp_data = new int[size]; for (int i = 0; i < size; i++) { temp_data[i] = m_data[i]; if (i >= m_length) { temp_data[i] = 0; } } delete[] m_data; m_length = size; m_data = temp_data; } void insertBefore(const int& insert, const int& before) { if (before < 0 || before > m_length) { std::cout << "배열의 크기 확인" << std::endl; return; } int* temp_data = new int[m_length + 1]; for (int i = 0, j = 0; i < m_length + 1; i++) { if (i == before) { temp_data[i] = insert; } else { temp_data[i] = m_data[j++]; } } delete[] m_data; m_data = temp_data; m_length++; } void remove(const int& number) { if (number < 0 || number > m_length) { std::cout << "배열의 크기 확인" << std::endl; return; } int* temp_data = new int[m_length - 1]; for (int i = 0, j = 0; i < m_length; i++) { if (i != number) temp_data[j++] = m_data[i]; } delete[] m_data; m_data = temp_data; m_length--; } void push_back(const int& number) { int* temp_data = new int[m_length + 1]; for (int i = 0; i < m_length; i++) temp_data[i] = m_data[i]; temp_data[m_length] = number; delete[] m_data; m_data = temp_data; m_length++; } friend std::ostream& operator << (std::ostream& out, const IntArray& arr) { for (int i = 0; i < arr.m_length; i++) { out << arr.m_data[i] << " "; } return out; } }; int main() { IntArray my_arr{ 1, 3, 5, 7, 9 }; my_arr.insertBefore(10, 1); std::cout << my_arr << std::endl; my_arr.remove(3); std::cout << my_arr << std::endl; my_arr.push_back(13); std::cout << my_arr << std::endl; }

  • c++
jjk0806 댓글 2 좋아요 1 조회수 113

강의 로드맵이 궁금합니다

미해결

쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)

어나더클래스 1,2,3과 대세는 쿠버네티스 그리고 HELM편 차이가 있나요? 어나더 클래스와 다른 강의 일까요? 로드맵 순서가 있는지 여쭤봅니다

  • kubernetes
  • infrastructure
  • container
mildoneshot 댓글 1 좋아요 1 조회수 141

null편에서..

해결됨

데이터 분석을 위한 판다스: 기초부터 데이터 분석까지

강사님 강의 열심히 보고 있습니다. null편에서요 titanic.sum()에서 오류가 나요, 강사님께서는 오류가 안났는데... 다른 방법이 있을까요 ?

  • pandas
지구의 파수꾼 댓글 2 좋아요 0 조회수 107

구조 개선하기

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

@EnableWebSecurity @Configuration public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http, HandlerMappingIntrospector introspector) throws Exception{ http .addFilterAt(authorizationFilter(introspector), AuthorizationFilter.class) .formLogin(Customizer.withDefaults()) .csrf(AbstractHttpConfigurer::disable); return http.build(); } @Bean public AuthorizationFilter authorizationFilter(HandlerMappingIntrospector introspector){ List<RequestMatcherEntry<AuthorizationManager<RequestAuthorizationContext>>> mappings = new ArrayList<>(); RequestMatcherEntry<AuthorizationManager<RequestAuthorizationContext>> requestMatcherEntry1 = new RequestMatcherEntry<>( new MvcRequestMatcher(introspector, "/user"), AuthorityAuthorizationManager.hasAuthority("ROLE_USER")); RequestMatcherEntry<AuthorizationManager<RequestAuthorizationContext>> requestMatcherEntry2 = new RequestMatcherEntry<>( new MvcRequestMatcher(introspector, "/db"), AuthorityAuthorizationManager.hasAuthority("ROLE_DB")); RequestMatcherEntry<AuthorizationManager<RequestAuthorizationContext>> requestMatcherEntry3 = new RequestMatcherEntry<>( new MvcRequestMatcher(introspector, "/admin"), AuthorityAuthorizationManager.hasAuthority("ROLE_ADMIN")); RequestMatcherEntry<AuthorizationManager<RequestAuthorizationContext>> requestMatcherEntry4 = new RequestMatcherEntry<>( AnyRequestMatcher.INSTANCE, // default strategy = AuthenticatedAuthorizationStrategy new AuthenticatedAuthorizationManager<>()); mappings.add(requestMatcherEntry1); mappings.add(requestMatcherEntry2); mappings.add(requestMatcherEntry3); mappings.add(requestMatcherEntry4); RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager.builder() .mappings(maps -> maps.addAll(mappings)).build(); return new AuthorizationFilter(manager); } @Bean public UserDetailsService userDetailsService(){ UserDetails user = User.withUsername("user").password("{noop}1111").roles("USER").build(); UserDetails db = User.withUsername("db").password("{noop}1111").authorities("ROLE_DB").build(); UserDetails admin = User.withUsername("admin").password("{noop}1111").roles("ADMIN","SECURE").build(); return new InMemoryUserDetailsManager(user, db, admin); } } 필터에 직접 RequestMatcherDelegatingAuthorizationManager를 넣는 방식으로 개선해 봤습니다 처음에는 RequestMatcherDelegatingAuthorizationManager -> RequestMatcherDelegatingAuthorizationManager 구조로 바꾸려고 했는데 access()에는 AuthorizationManager<RequestAuthorizationContext>만 가능해서 AuthorizationManager<HttpServletRequest>인 RequestMatcherDelegatingAuthorizationManager를 바로 못 넣더라구요 그래서 필터를 생성하고 필터 생성자로 RequestMatcherDelegatingAuthorizationManager를 넣는 방식을 사용했습니다

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
bae jewoo 댓글 1 좋아요 0 조회수 155

인기 태그

인프런 TOP Writers

주간 인기글