inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

강의 교안에서 SessionManagementFilter 이미지 질문

미해결

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

강의 교안의 동시 세션제어필터 로직의 흐름도 그림에서 SessionManagementFilter가 세션 만료 설정 플래그를 설정하는 그림에서 혼동이 있어서 질문드립니다. 현재 스프링시큐리티 6 이후 기본동작에서는 SessionManagementFilter가 기본 동작하지 않는 것으로 알고 있습니다. 실제로 세션 관련 설정을 이것저것 바꿔봐도 SessionManagementFilter가 필터체인에 추가되지 않더군요. (실제로 강의에서도 이 부분을 언급하신 것을 확인했고, 공식문서 에서도 확인했습니다.) 대신 UsernamePasswordAuthenticationFilter(정확히는 이것의 상위 클래스인 AbstractAuthenticationProcessingFilter)와 같은 곳에서 명시적으로 sessionAuthenticationStrategy를 호출하여 세션 관련 처리를 위임시키는 식으로 처리하는데요. 현시점 기본 동작 관점에서 보면 강의 교안에 나와있는 흐름도를 보면 SessionManagementFilter로 그림이 나와잇는 부분은 UsernamePasswordAuthenticationFilter와 같은 최초 로그인을 담당하는 필터에서 인증후 strategy를 통해 만료플래그가 설정되는 것으로 나타나게 하는 것이 좀 더 정확하지 않을까 싶어서 질문을 드립니다.

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
땃쥐 댓글 1 좋아요 1 조회수 284

과제 답안

해결됨

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

두번째 과제 풀고 있는데 답이 혹시 어디 있을까요?

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
mins199600 댓글 1 좋아요 0 조회수 305

http 파일이 잘 안 먹힐 때

해결됨

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

### 로그인 POST http://localhost:8080/login Content-Type: application/json { "username": "user", "password": "1111" } > {% client.global.set("JSESSIONID", response.headers.valueOf("Set-Cookie").split(";")[0].split("=")[1]) %} ### 루트 접속 GET http://localhost:8080/ Accept: application/json Cookie: JSESSIONID={{JSESSIONID}} 강의에서 설명하신 대로 따라해봤는데 http 파일이 잘 작동하지 않는 문제가 있었습니다. 이 부분이 잘 안 먹혀서 찾아봤는데 인프런 현재 CTO이신 '향로'님 블로그쪽에 이 내용이 정리가 되어 있는 것을 확인할 수 있었습니다. - https://jojoldu.tistory.com/366 > {% %} 를 http 파일에 작성하고, 이 사이에서 응답이 온 데이터를 전역변수로 저장해둘 수 있습니다. 이후 로그인할 때 Cookie: JSESSIONID={{JSESSIONID}} 와 같이 전역변수에서 꺼내서 사용하면 명시적으로 쿠키를 지정해서 전달할 수 있어서 작동이 잘 됩니다.

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
땃쥐 댓글 1 좋아요 4 조회수 336

fetch join 4개만 나오는건 알겠는데 json에서는 다른이유

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] join을 하면 4개가 나오는데 id가 같지만 orderItems는 서로 다르게 나옵니다. 근데 왜 json에서는 orderItems 중복되서 왜 똑같이 나오는건가요? 그리고 값이 왜 orderItems는 여러개씩 출력이 되는거죠? 사실상 sql시 하나씩 setter로 들어가서 출력되지않나요? 예) "orderItems": [ { "itemName": "JPA1 BOOK", "orderPrice": 10000, "count": 1 }, { "itemName": "JPA2 BOOK", "orderPrice": 20000, "count": 2 } ] 위와 같이 orderItems가 두개가 나옵니다. 근데 sql은 하나씩 출력이 되는데 그러면 "orderItems": [ { "itemName": "JPA1 BOOK", "orderPrice": 10000, "count": 1 } ] 위와 같이 하나만 출력이 되어야하는거 아닌가요? setter로 매핑 되면 그렇지않나요?

  • java
  • spring
  • spring-boot
  • jpa
캐내기 댓글 1 좋아요 1 조회수 752

405에러가 발생합니다. 이유를 잘 모르겠습니다.

미해결

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

1 package com.attendance.scheduler.infra.config.security; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; @Configuration @RequiredArgsConstructor @EnableWebSecurity public class SecurityConfig { public static final String[] ENDPOINTS_WHITELIST = { "/", "/submit", "/completion", "/class/**", "/board/**", "/join/**", "/cert/**", "/help/**", "/comment/**", "/css/**", "/js/**" }; private final CustomAuthenticationFailureHandler customAuthenticationFailureHandler; @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Bean public SecurityFilterChain adminFilterChain(HttpSecurity httpSecurity) throws Exception { httpSecurity .csrf(AbstractHttpConfigurer::disable) .securityMatcher("/admin/**","/manage/**") .authorizeHttpRequests(auth -> auth .requestMatchers("/admin/**") .hasAuthority("ADMIN") .requestMatchers("/manage/**") .hasAnyAuthority("ADMIN", "TEACHER") .anyRequest().authenticated()) .formLogin(httpSecurityFormLoginConfigurer -> httpSecurityFormLoginConfigurer .defaultSuccessUrl("/manage/class", true) .failureHandler(customAuthenticationFailureHandler) .loginPage("/login") .loginProcessingUrl("/login") ) .logout(httpSecurityFormLogoutConfigurer -> httpSecurityFormLogoutConfigurer .logoutUrl("/logout") .invalidateHttpSession(true) .deleteCookies("JSESSIONID") .logoutSuccessUrl("/")) .sessionManagement(sessionManagement -> sessionManagement .invalidSessionUrl("/login") .maximumSessions(1) .maxSessionsPreventsLogin(true) .expiredUrl("/login")); return httpSecurity.build(); } } 2 package com.attendance.scheduler.infra.config.security; import com.attendance.scheduler.admin.domain.AdminEntity; import com.attendance.scheduler.admin.repository.AdminJpaRepository; import com.attendance.scheduler.infra.config.security.Admin.AdminDetails; import com.attendance.scheduler.infra.config.security.User.TeacherDetails; import com.attendance.scheduler.teacher.domain.TeacherEntity; import com.attendance.scheduler.teacher.repository.TeacherJpaRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Component; @Slf4j @Component @RequiredArgsConstructor public class AccountDetailService implements UserDetailsService { private final AdminJpaRepository adminJpaRepository; private final TeacherJpaRepository teacherJpaRepository; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { log.info("teacherId = {}", username); final TeacherEntity teacherEntity = teacherJpaRepository .findByUsernameIs(username); if(teacherEntity != null){ return new TeacherDetails(teacherEntity); } else { final AdminEntity adminEntity = adminJpaRepository .findByUsernameIs(username); if (adminEntity != null) { log.info("adminId = {}", username); return new AdminDetails(adminEntity); } } throw new UsernameNotFoundException(username); } } 3 <form method='post' th:action="@{/login}" th:object="${login}"> 로그인을 진행하면 405에러가 계속 발생합니다. 이유를 찾고 있으나 아이디와 비밀번호를 입력해도 2번 코드의 로그에 남지 않습니다. 혹시 이유를 알려주실수 있을까요? 감사합니다.

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
dev.hong 댓글 2 좋아요 1 조회수 617

15섹션 프로그래밍 방식의 인가 구현 – DB 연동 / 여러개의 권한매핑

미해결

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

섹션 15 (프로그래밍 방식의 인가 구현 – DB 연동) 강의에서 6:10 에 작성하신 코드 위 코드에 대해서 질문 드립니다. 저는 PageDto라는 객체를 만들고 해당 객체는 String url, Set<PageRole>으로 구성되어있고 위와 같이 코드를 작성하였습니다. 데이터를 Map에 넣고 콘솔창에 출력해보았을 때 url값이 중복이라(맵의 key값) 마지막 권한만이 Map<String, String>객체에 들어가는데 하나의 url에 여러 개의 권한을 매핑 할 때 해당 구조로 작성 하는 것이 맞는지 질문 드립니다. 만약에 Map<String, Set>구조이면 이후 커스텀 매니저에서 setMapping()의 로직이 달라지는지도 궁금합니다.

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
ckdtjd1272 댓글 1 좋아요 1 조회수 413

엔티티가 중첩되는 경우 질문있습니다!

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

안녕하세요 강의 보면서 게시판 성격의 서비스를 만들던 중에 궁금증이 생겼습니다. 두 가지 방법이 있는데, 제가 취준생이라 실제 서비스 코드들을 본 적이 없어서 어떤 방법이 조금 더 현명한 방법인지 궁금합니다! Jpa 사용법처럼 게시글과 댓글을 맵핑하는 방법입니다. 댓글에 게시글의 키만 가지는 방법입니다. 1번 코드는 대략적으로 이런 형태일 것 같습니다. @Entity public class Article{ @Id @GeneratedValue(strategy = Identity) long id; String content; } @Entity public class Comment{ @Id @GeneratedValue(strategy = Identity) long id; String comment; @ManyToOne(fetch = FetchType.LAZY) Article article; } 1번 코드의 경우에는 배울 때는 맵핑도 깔끔하게 잘 되고 좋았는데, 실제 개발을 하다 보니 댓글만 사용하는 경우에 있어서 Article의 내용은 전혀 필요가 없는 경우도 많을 것 같습니다. 또한 게시글의 댓글들을 조회 할 때, 같은 Article 내용들이 반복해서 들어 있다는 점이 마음에 걸립니다.(Lazy 하게 가져와서 문제가 없을것 같기도 하고 이 부분은 확실하지 않습니다.) 2번 코드는 게시글의 키만 가지는 경우입니다. @Entity public class Article{ @Id @GeneratedValue(strategy = Identity) long id; String content; } @Entity public class Comment{ @Id @GeneratedValue(strategy = Identity) long id; String comment; long articleId; } 2번의 경우에는 불필요한 정보를 담지 않고 필요한 경우에는 Id값으로 찾아서 가져올 수 있습니다. 하지만 article 과 Comment를 각각 따로 관리하는 형태가 됩니다.(사실 1번 코드도 따로 관리는 가능할 것 같습니다) 간단한 경우에는 1번이 좋은 것 같은데 컴포지션 되는 객체들이 많은 경우에는 그 자체로 정말 생각해야 되는 경우가 많아 지는 것 같습니다.(Comment 안에 Article, User, 첨부 파일 Entity 등등이 복잡하게 들어갈 수 있을 것 같습니다 ) 네이버 카페와 같은 사이트들의 경우에서는 게시글과 댓글을 따로 관리하는 것 같기도 하고(작성 글 보기를 누르면 삭제된 게시글 이지만 댓글 내용은 볼 수 있는 경우입니다) 실제로는 어떤 방식으로 풀어 가는지 궁금합니다!

  • java
  • jpa
lee 댓글 1 좋아요 0 조회수 256

@Transactional 적용 범위 질문

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요! 강의 잘 듣고 있습니다. @Tansactional 어노테이션을 붙이면 private 메서드들에도 해당 어노테이션이 적용되는 건가요? 이 질문을 하는 이유는 join 메서드 안에서 validateDuplicateMember 메서드를 사용하고 있고 join은 @Transactional이 걸려있는 상태인데 이럴 경우에 어떤 게 적용되는지 궁금합니다.

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
김수용 댓글 1 좋아요 0 조회수 293

열거형 - ENUM 수업자료 오타

해결됨

김영한의 실전 자바 - 중급 1편

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 5. 열거형 - ENUM.pdf 의 p.18 에 SLIVER 오타가 있습니다. SLIVER -> SILVER 로 변경되어야 할 것 같습니다.

  • java
  • 객체지향
조깅하는가오리 댓글 1 좋아요 0 조회수 263

프록시 초기화 detach 질문

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

[질문 내용] 안녕하세요 저와 비슷한 질문이 게시판에 올라와있는데 답변이 이해가지 않아서 질문 올립니다 아래 코드에서 강의와 다른점은 System.out.println에서 reference.getClass() 대신 reference를 썼다는 점 입니다. try { Member member1 = new Member(); member1.setName("member1"); em.persist(member1); em.flush(); em.clear(); Member reference = em.getReference(Member.class, member1.getId()); System.out.println("reference = " + reference); em.detach(reference); System.out.println(reference.getName()); tx.commit(); } catch (Exception e) { tx.rollback(); e.printStackTrace(); } finally { em.close(); } reference.getClass()에서 getClass()를 쓰지 않으면 reference.geName()했을때 member1로 출력이 됩니다. 그런데 이 이유를 모르겠습니다. 저는 detach(reference)를 하면 프록시 객체 reference가 영속성 컨텍스트에서 분리되어서 getName()을 쓰지 못할거라고 생각했는데 왜 member1이 출력되는지 모르겠습니다 여기서도 에러가 나야하는것 아닌가요?

  • java
  • jpa
한조 댓글 3 좋아요 0 조회수 352

13분 11초에서 최근 파일 보는 단축키

미해결

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

강사님 안녕하세요, 강의 잘듣고 있습니다. 디버깅하면서 내용을 이해하려고 하는데 따라가기가 조금 벅차네요. 13분 11초 대에 Recent files 검색하는 부분 윈도우 단축키 가 무엇인지 궁금합니다. 좋은강의 감사합니다.

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
  • recentfiles
KYUNG TAE BAE 댓글 1 좋아요 1 조회수 454

update 모드에서 @Column(unique = true) 추가 시 변경 적용 안

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] update 모드에서 기존엔티티에 @Column(unique = true) 를 사용한다음 재시작을 했는데, 변경 사항이 h2에 적용이 되지 않습니다. 그런데 @Column(name="username", unique=true) 를 하니 이번에는 ALTER 쿼리가 나가서 name과 unique 변경사항이 db에 적용이 됩니다. update 모드에서 @Column(unique = true) 를 했을때 적용이 되지 않고 @Column(name="username", unique=true) 이렇게 해야만 적용이 되는 이유를 알 수 있을까요?

  • java
  • jpa
김동현 댓글 2 좋아요 0 조회수 610

16:29초 order와 order_item 사이 연관관계 주인

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

16:29초에 order_item에서 order가 연관관계 주인이 된다고 하셨는데 order_item 엔티티 클래스 안에 보면 ```java @JoinColumn(name = "order_id") private Order order; ``` @JoinColumn을 한 order 외래키를 가진 order_item이 연관관계 주인 아닌가요?

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
cynicalsky25 댓글 2 좋아요 0 조회수 289

테스트시 오류 발생 해결법에 대한 질문

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. ===================================== [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 앞서 질문한 학생들의 질문들과 구글링을 진행해봤지만 해결되지 않아 질문 남깁니다. 먼저 강의를 따라 쭉 타이핑을 했는데 Junit4 를 사용하여 테스트를 만들고 진행해 봤고, 테스트가 안되어서 build.gradle와 MemberRepositoryTest 등을 번갈아가면서 수정해봤지만 어떤것이 문제인지 모르겠습니다. 파일 링크 남겨드립니다. https://drive.google.com/file/d/1EsGR5F0YDa1G97u5616ZM8JeYwWZYjQr/view?usp=sharing

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
devwon.1999 댓글 1 좋아요 1 조회수 451

H2 데이터베이스는 잘 연결되는데, 14:03 MEMBER 테이블이 생성되지 않아요

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 테스트를 실행하면 로그는 이렇게 찍힙니다. WARNING: A Java agent has been loaded dynamically (/Users/esyoleo/.gradle/caches/modules-2/files-2.1/net.bytebuddy/byte-buddy-agent/1.14.12/be4984cb6fd1ef1d11f218a648889dfda44b8a15/byte-buddy-agent-1.14.12.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 어떻게 하면 좋을까요? JUnit은 4를 사용중이고, 필요한 설정은 build.gradle, yml 등에 모두 작성한 상황입니다.

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
YOIEO_0120 댓글 1 좋아요 0 조회수 485

Redis만 사용하면 인증 상태 영속이 되지 않습니다..!

미해결

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

안녕하세요 구버전에 이어 신버전 강의도 출시해주셔서 감사합니다! 구버전 커뮤니티에 질문올렸었는데요~ 이번 강의를 봐도 해결이 되지않아서 질문 올려봅니답..! 직접 spring security 메인테이너나 컨트리뷰터들한테도 물어봤는데, 제가 제대로 질문을 못해서인지 해결을 못했는데요. 시큐리티 + formlogin + Redis를 활용해서 인증방식을 구현했습니다. 아래 코드로 인증 객체를 꺼낼때 문제가 발생합니다. @ResponseStatus(HttpStatus.OK) @GetMapping("/test") public void test() { SecurityContextHolderStrategy contextHolderStrategy = SecurityContextHolder.getContextHolderStrategy(); System.out.println(">> contextHolderStrategy : " + contextHolderStrategy); // org.springframework.security.core.context.ThreadLocalSecurityContextHolderStrategy@7e1fbf12 SecurityContext context = contextHolderStrategy.getContext(); System.out.println(">> context : " + context); // SecurityContextImpl [Authentication=AnonymousAuthenticationToken Authentication authentication = context.getAuthentication(); System.out.println(">> authentication : " + authentication); // AnonymousAuthenticationToken MemberContext memberContext = (MemberContext) authentication.getPrincipal(); System.out.println(">> memberContext : " + memberContext); // ClassCastException String username = memberContext.getUsername(); System.out.println(">> username : " + username); } Redis를 사용하지 않고 tomcat에 저장할 경우 session을 통해서 인증 객체를 잘 받아오는데, >> contextHolderStrategy : org.springframework.security.core.context.ThreadLocalSecurityContextHolderStrategy@54f61d2b >> context : SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=com.spring.security.config.security.service.MemberContext [Username=sejinpark@email.com, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, CredentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_ADMIN]], Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=A220DB3D8904393F7D9831276564566A], Granted Authorities=[ROLE_ADMIN]]] >> authentication : UsernamePasswordAuthenticationToken [Principal=com.spring.security.config.security.service.MemberContext [Username=sejinpark@email.com, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, CredentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_ADMIN]], Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=A220DB3D8904393F7D9831276564566A], Granted Authorities=[ROLE_ADMIN]] >> memberContext : com.spring.security.config.security.service.MemberContext [Username=sejinpark@email.com, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, CredentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_ADMIN]] >> username : sejinpark@email.com Redis만 사용하면 인증 완료 후 인증 후 요청에서 Anonymous로 변경됩니다. >> contextHolderStrategy : org.springframework.security.core.context.ThreadLocalSecurityContextHolderStrategy@577154a7 >> context : SecurityContextImpl [Authentication=AnonymousAuthenticationToken [Principal=anonymousUser, Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=16bec162-3ad3-459d-8b97-bf3d6f1de226], Granted Authorities=[ROLE_ANONYMOUS]]] >> authentication : AnonymousAuthenticationToken [Principal=anonymousUser, Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=16bec162-3ad3-459d-8b97-bf3d6f1de226], Granted Authorities=[ROLE_ANONYMOUS]] 2024-04-17T07:49:13.061+09:00 ERROR 84540 --- [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.ClassCastException: class java.lang.String cannot be cast to class com.spring.security.config.security.service.MemberContext (java.lang.String is in module java.base of loader 'bootstrap'; com.spring.security.config.security.service.MemberContext is in unnamed module of loader 'app')] with root cause java.lang.ClassCastException: class java.lang.String cannot be cast to class com.spring.security.config.security.service.MemberContext (java.lang.String is in module java.base of loader 'bootstrap'; com.spring.security.config.security.service.MemberContext is in unnamed module of loader 'app') at com.spring.security.controller.MemberController.test(MemberController.java:43) ~[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] Redis 내부에 인증객체가 저장되어 있는것 까지 확인했는데요. 혹시 SecurityFilterChain에 Redis관련 저장소를 별도로 설정을 해줘야 하는지, 어떤 부분을 확인해야하는지 여쭙고 싶습니다. Redis를 사용하는데 계속 HttpSessionSecurityContextRepository에서 시큐리티 컨텍스트를 찾을 수 없다고 나옵니답. 2024-04-17T17:05:01.251+09:00 WARN 30066 --- [nio-8080-exec-1] w.c.HttpSessionSecurityContextRepository : SPRING_SECURITY_CONTEXT did not contain a SecurityContext but contained: '{authentication={authorities=[{authority=ROLE_ADMIN}], details={remoteAddress=0:0:0:0:0:0:0:1, sessionId=null}, authenticated=true, principal={password=null, username=sejinpark@email.com, authorities=[{authority=ROLE_ADMIN}], accountNonExpired=true, accountNonLocked=true, credentialsNonExpired=true, enabled=true}, credentials=null, name=sejinpark@email.com}}'; are you improperly modifying the HttpSession directly (you should always use SecurityContextHolder) or using the HttpSession attribute reserved for this class? 우선 테스트용으로 SecurityFilterChain에서 아래처럼 기존 버전 처럼 사용해서 인증 상태를 무조건 저장할 수 있도록 해놨습니다. 커스텀 인증필터를 사용 안하고, SecurityContextPersistanceFilter를 사용하도록했습니다. securityContext.requireExplicitSave(false); 테스트용으로 만든 레포지토리 링크 첨부합니다! https://github.com/codesejin/security-test

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
세진:) 댓글 2 좋아요 0 조회수 785

ec2서버에서 user예약어 관련 오류이신분

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

현제 45강까지 완료했고 구글링해서 user라는 키워드가 현제 제가 쓰고있는 버전에서는 예약어이기때문에 사용아 안된다는것까지 인지했습니다. 그래서 yml에 dev에 해당하는 url에 NON_KEYWORDS=USER까지 입력했고 User class에 @Table(name ="USER") 까지 적용해서 git을 이용해서 ec2서버에 적용했지만 동일한 오류가 발생합니다. 2일정도를 해결하려했는데 안되어서 질문 남깁니다. 저의 github 는 https://github.com/Jo-Jun-Yeong/library-app 입니다. 그리고 제가 사용하는 hc2 ip는 54.180.104.239 입니다 다른 인프런에 답글달아주신 글도 봤지만 user가 예약어이니 nonkeyword적용해라 이상의 해결을 못봤습니다.. /////////////////////////////////////////// 라고 질문하려했는데 마지막으로 ./gradlew build가 적용되지않아서 그런거지않을까? 해서 ./gradlew clean 후 build했더니 적용되었습니다. 특히 User.class에 @Table(name="user")적용을 해야 하는것 같습니다. 저처럼 2틀동안 삽질하지 않으셨으면 좋겟네요

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
준영 댓글 1 좋아요 0 조회수 329

mustache를 사용하지 않고 thymeleaf를 사용하려고 하는데

미해결

스프링부트 시큐리티 & JWT 강의

mustache를 사용하지 않고 thymeleaf를 사용하려고 하는데 config의 WebMvcConfig의 configureViewResolvers도 작성해야 하나요? 참고로 스프링 부트 사용 중입니다!

  • spring
  • spring-security
  • jwt
duswlskfk42 댓글 1 좋아요 0 조회수 716

hasRole 과 hasAuthority 의 차이

미해결

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

안녕하세요 hasRole 과 hasAuthority 의 차이가 없는 거 같아서 질문 드립니다. 기능 상 차이가 없다면 용도의 차이가 있는지 궁금합니다.

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
hoonseung 댓글 1 좋아요 0 조회수 1272

인기 태그

인프런 TOP Writers

주간 인기글