수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 시큐리티
질문
선생님 코드 찾기가 어려워 질문드립니다. 저는 로그인을 하지 않고 메소드인증쪽에 루트페이지에서 접속하게 되면 decide 를 호출하는 쪽까지는 잘 가는데 decide 까지만 가면 runtimeException -> CglibAopProxt 클래스에 런타임 에러가 잡혀서 디버깅을 끝내고 로그인 페이지가 아닌 500 에러 스택트레이스 화면을 띄워버립니다.. 어디에 문제가 있을까요.. 핸들러들 다 정상적으로 등록했는데 왜이런지 모르겠습니다.
- 미해결스프링 시큐리티
질문
24:16 초 쯤에 디버깅으로 하단에서 권한이 manager 와 user 권한이 2개가 있는데요 이전에 했던 권한 계층 나누기수업을 끝냈으면 밑에 권한은 manager 하나만 있어야하는 것 아닌가요? 저런식으로 하면 계층권한을 나눌 필요가 ㅇ없을 것 같아서요
- 미해결스프링 시큐리티
SecurityContextHolder 관련 질문이 있습니다!
안녕하세요. 항상 좋은 강의 감사드립니다! SecurityContextholder 관련 질문이 있어 글을 적게 되었습니다. SecurityContext는 ThreadLocal 기반이고, 이를 전역에서 사용할 수 있도록 Static 변수인 SecurityContextHolder에 저장된다고 이해를 했습니다. (강의 내용을 참고, 혹시.. SecurityContextHolder가 Static 변수가 아니라면 정정해주시면 감사하겠습니다!) 여기서 궁금한 부분은... 멀티 쓰레딩 환경입니다. 스프링 MVC는 결국 요청마다 쓰레드가 할당되는 쓰레딩풀 환경이라 멀티 쓰레드로 동작을 하고 있는 것으로 알고 있습니다. 그렇다면 동시에 사용자로부터 인증 요청이 온다면, 동시에 SecurityContextHolder에 SecurityContext가 각각 저장된다는 것인데.. 이런 환경에서 어떻게 동작하는지 잘 이해하기가 어렵습니다. 예를 들어 동시에 인증 요청이 오게 되면, SecurityContextHolder의 동시성 문제는 어떻게 처리되는 걸까요? 항상 좋은 강의 감사드립니다 좋은 하루 되세요!
- 해결됨스프링 시큐리티
진행중에 jpa 오류가 발생 합니다.
org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: io.security.corespringsecurity.domain.entity.Role; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: io.security.corespringsecurity.domain.entity.Role 찾아보니까 @ManyToOne(cascade = {CascadeType.ALL},fetch = FetchType.LAZY) 해당 에러가 발생 합니다. RoleHierarchy 의 경우 package io.security.corespringsecurity.domain.entity; import lombok.*; import javax.persistence.*; import java.io.Serializable; import java.util.HashSet; import java.util.Set; @Entity @Table(name="ROLE_HIERARCHY") @Data @AllArgsConstructor @NoArgsConstructor @ToString(exclude = {"parentName", "roleHierarchy"}) @Builder public class RoleHierarchy implements Serializable { @Id @GeneratedValue private Long id; @Column(name = "child_name") private String childName; @ManyToOne(cascade = {CascadeType.ALL},fetch = FetchType.LAZY) @JoinColumn(name = "parent_name", referencedColumnName = "child_name") private RoleHierarchy parentName; @OneToMany(mappedBy = "parentName", cascade={CascadeType.ALL}) private Set<RoleHierarchy> roleHierarchy = new HashSet<RoleHierarchy>(); } 해당 내용으로 작성 하였구요 SetupDataLoader에서 setupSecurityResources() => private void setupSecurityResources() { Set<Role> roles = new HashSet<>(); Role adminRole = createRoleIfNotFound("ROLE_ADMIN", "관리자"); roles.add(adminRole); createResourceIfNotFound("/admin/**", "", roles, "url"); createUserIfNotFound("admin", "pass", "admin@gmail.com", 10, roles); Set<Role> roles1 = new HashSet<>(); Role managerRole = createRoleIfNotFound("ROLE_MANAGER", "매니저"); roles1.add(managerRole); createResourceIfNotFound("io.security.corespringsecurity.aopsecurity.method.AopMethodService.methodTest", "", roles1, "method"); createResourceIfNotFound("io.security.corespringsecurity.aopsecurity.method.AopMethodService.innerCallMethodTest", "", roles1, "method"); createResourceIfNotFound("execution(* io.security.corespringsecurity.aopsecurity.pointcut.*Service.*(..))", "", roles1, "pointcut"); createUserIfNotFound("manager", "pass", "manager@gmail.com", 20, roles1); createRoleHierarchyIfNotFound(managerRole, adminRole); Set<Role> roles3 = new HashSet<>(); Role childRole1 = createRoleIfNotFound("ROLE_USER", "회원"); roles3.add(childRole1); createResourceIfNotFound("/users/**", "", roles3, "url"); createUserIfNotFound("user", "pass", "user@gmail.com", 30, roles3); createRoleHierarchyIfNotFound(childRole1, managerRole); } 해당 내용으로 작성 하였습니다. 보고 따라치는 과정에서 무언가 빠졌을까요
- 해결됨스프링 시큐리티
UserDetailsService, PasswordEndoder 재 정의
강의를 수강하면서 기존 시스템에 JWT와 Spring Security 를 적용하고 있습니다.1)비밀 번호가 없을경우 Password Encoder - 기존 암호화 알고리즘을 변경 할수 없어 PasswordEncoder를 구현한 커스텀 PasswordEncoder로 해결은 하였는데 생체 인증의 경우 비빌번호를 생체정보가 대신하기 떄문에 비밀 번호업이 인증을 해야 하는데 PasswordEncoder 없이 인증을 진행 할 수 있는 방법이 있을까요? 2. UserDetailService를 구현시 loadUserByUsername 을 구현해야 하는것으로 알고 있는데 인자가 사용자 정보를 가져 오기 위한 유니크한 키(로그인 게정등등) 인에 현재 시스템은 로그인 게정만 가지고는 사용자의 정보를 조화 할수 없는데 loadUserByUsername을 구현하지 않고 UserDetails(User를 상속한 CustomUserDetail) 객체를 리턴 할 수 있는 방업이 있을까요.
- 미해결스프링 시큐리티
changeSessionId()에 대한 질문이 있습니다!
안녕하세요. 항상 좋은 답변 주셔서 감사합니다. changeSessionId()에 대해서.. 이해가 잘 안되는 부분이 있어 문의드립니다. chagneSessionId()는 기존 Session을 유지하되, 그 Session에 SessionId만 새로 부여하는 것으로 이해를 했는데... 강의에서는 세션도 새롭게 만들어지고, Session Id도 새롭게 만들어진다고 설명을 해주셨습니다! ChangeSessinId() 정책은.. 세션 새로 만들고, 그에 따라 당연히 JSESSIONID도 새로 생성될 것이고, 기존에 사용하던 세션으로부터 세션 정보를 가져와서 새롭게 만든 세션에 저장하는 정책일까요? 항상 감사합니다. 좋은 하루 되세요.
- 미해결스프링 시큐리티
질문
선생님 여기까지 강의 소스코드 브랜치 링크좀올려주실수있으실까요 ajax 프로바이더를 스프링시큐리티에서 가져오질못하네요 로그인요청을 날리는데 필터는 ajax 전용필터로 이동하는데 매니저가 프로바이더를 못머금고 있어요 혹시 소스코드 이 강의까지 똑같은거 링크받아볼 수 있을까요?...
- 미해결스프링 시큐리티
Session / 인증객체 / Security Context 관계가 궁금합니다.
안녕하세요. 항상 좋은 강의 감사드립니다! 하나 궁금한 것이 있어 글을 적게 되었습니다. Session / 인증객체 / Security Context의 관계가 궁금합니다. 인증이 완료되면 인증객체가 만들어지고, 인증 객체가 Security Context에 저장되고, Security Context Holder에 Security Context가 존재되는 것으로 이해를 했습니다. 그렇다면 Session에는 정확히 어떤 것이 저장되는 것인지 알 수 있을까요? 예를 들어 Session에는 Security Context Holder가 저장되나요, 아니면 Security Context가 저장되나요, 아니면 인증객체가 저장되나요? Security Context와 Session은 아예 서로 참조하지 않는 관계인 것으로 이해를 해야할까요? 모르는게 너무 많아 질문이 단순무식해서 죄송합니다. 답변 달아주시면 감사하겠습니다!
- 미해결스프링 시큐리티
WebSecruityConfigurerAdapter가 2개이면 아래 검은 노드로 표현된 filter들이 2개씩 있는 것인가요?
안녕하세요 좋은 강의 감사하게 잘 보고 있습니다.시큐리티 공부를 해야하는 중 이런 강의가 있어서 다행이라고 생각하고 있습니다. 다름이 아니라 WebSecruityConfigurerAdapter 설정을 강의에서와 같이 2개 만들면 아래쪽 검은 노드로 표현된 filter들이 최대 2개씩 존재할 수 있다고 생각하면 되는지 궁금합니다. 만약 그렇다면 우선순위가 높은 filters에서 Authentication 객체가 할당된 경우 우선순위가 낮은 filters에서는 어떻게 되는지요. 예를 들어서 SecurityContextHolder에 이미 Authentication 객체가 존재하는데 만약에 우선순위가 낮은 filters에서도 UsernamePasswordAuthenticationFilter가 있어서 새롭게 인증이 되게 되면 같은 일을 반복하는 것 같기도 하고 무언가 문제가 생길 것 같기도 해서요.
- 미해결스프링 시큐리티
404 error page로 이동하는 것에 대해
http.authorizeRequests() .mvcMatchers("/","/login*").permitAll() .anyRequest().authenticated(); 위의 경로를 제외하고는 인증을 받아야만 페이지 이동이 가능하다고 해놓아서 그런지 이상한 경로를 입력했을 경우에도 로그인하라고 창이 뜹니다. 저는 404error에 대한 처리를 해놓아서 바로 그 페이지로 이동하게 하고 싶은데, 로그인을 하면 정상적으로 작동되지만 로그인을 하지 않은 경우에는 로그인 창으로 이동합니다. 허가하는 경로에 모든 경로를 적어줄순 없는데 어떻게 해결해야하나요??
- 미해결스프링 시큐리티
질문
선생님 response 로 json 을 던져줄 때 엔티티를 던져도되는건가요? dto 로 따로 변환후에 보내야하는 것 아닌가요 ? mapper 로 바꿔도,,
- 미해결스프링 시큐리티
질문
1. 왜 respone.sendredirect 로 진행하지 않고 객체로 진행하나요? 2. 인증에 성공하고 페이지를 이동할 때마다 인증을 유지 검사하는 필터는 무슨필터인가요? 매번 인증 로그인을 하고 voter 의 인가를 처리할 때 말고 인증 후에 이동하면서 이 유저가 여기 접속해도 되고 세션이 유효하다는 것을 검증하며 유지하는 필터요!
- 미해결스프링 시큐리티
롤 하이라키 관련 질문이 있습니다.
안녕하세요 강사님 롤 하이라키를 적용 하고 있습니다. API에서는 롤 계층권한이 잘 적용 된 것 으로 확인이 되었는데요. 타임리프에서는 sec:authorize="hasRole('ROLE_USER')" 이렇게 하고 USER보다 상위 권한에게도 동일하게 메뉴가 보이지 않고 있습니다. 타임리프에서는 hasanyrole등으로 권한들을 다 열거 해주어야 하는지 궁금합니다. 감사합니다.
- 미해결스프링 시큐리티
질문
선생님 아래 코드에서 modelmapper 를 활용해주셨는데 혹시 html에서 name ? 속성으로 넘어오는 값들에 대해서 dto의 필드 이름과 매치하면 자동으로 account 에 매칭되고 그냥 mapper 를 쓸 필요없이 아래문장만 있으면 될거같은데 굳이 mapper 를 통해서 account 객체를 빼준 이유가 있을까요? account.setPassword(passwordEncoder.encode(account.getPassword()));
- 미해결스프링 시큐리티
Filter의 처리 순서에 관한 질문
안녕하세요. 학습내용을 복습하던중 질문이 있습니다. <p>DelegatingFilterProxy</p> 와 <p>FilterChainProxy</p> 의 요청 처리 흐름을 <p>DispatcherServlet</p>을 포함하여 설명하는 그림에서 질문이 있습니다. <p>FilterChainProxy</p>가 직접 <p>DispatcherServlet</p>에 요청을 하는 것이 맞나요? 제 생각에는 첨부한 그림과 같은 실행 순서가 되야 할 것 같습니다. <p>FilterChainProxy</p>가 인증 인가 처리를 마친 후 직접 <p>DispatcherServlet</p>에 요청을 날리게 되면 <p>Servlet Container</p>의 필터 Filter 체인 실행에 문제가 있을 것 같습니다.
- 미해결스프링 시큐리티
선생님은 얼티메이트 버전 쓰시나요?
선생님은 인텔리제이 얼티메이트 버전 쓰시나요?
- 미해결스프링 시큐리티
질문
선생님 강의를 보다 궁금한점이 생겼습니다. 제가 옛날에 들었던 얘기가 있었는데 강의소개에는 기업에서 form 방식을 많이 이용한다고 봤습니다. 그런데 이렇게 세션을 이용하는 방식은 세션 자체가 서버에 저장되는 방식이기 때문에 서버에 부담을 주게된다고 해서 jwt 를 많이 이용한다고 하는데 jwt 보다 좋은 점이 있을까요?
- 미해결스프링 시큐리티
8:37 bean 등록과 직접 인스턴스 생성의 차이
authenticationEmtryPoint 선언이 new AjaxLoginAuthenticationEntryPoint()를 넣어 주셧는데 그 다음에는 ajaxAccessDeniedHandler의 경우에는 직접 Bean으로 등록을 해서 매개변수로 넣어 주셧는데 이렇게 하신 이유와 차이점에 대해 궁금합니다. 다른 질문에서도 이에 대해서 이미 물어본것으로 확인했는데요, 어떤 이유로 다르게 작성을 햇는지 그 생각의 과정이 궁금합니다.
- 미해결스프링 시큐리티
10:28분에 bean으로 만들어 주는 이유
10:28분에 bean으로 만들어 주는 이유에 대해 궁금합니다. bean으로 생성한 이유는 의존성 주입을 통해서 결합력을 낮추기 위한 목적인가요?
- 미해결스프링 시큐리티
혹시
이방식은 @Secured 만이 아닌 @PreAuthroized 등등 MetadataSource에 연관된 다른 어노테이션도 이런 방식으로 동작 하는건가요??