수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 시큐리티
세션 제어에 관해서 문의드립니다.
동시사용자 접속에 관한 기본 흐름을 잘 이해했습니다.그러면 sessionmanagementfilter를 사용해서 권한별 사용자 접속 제어는 어떻게 custom해서 사용할수 있을까요?????
- 미해결스프링 시큐리티
usernameDetailService 객체 null
userDetailsService 가 null값으로 나오는 문제관련하여 해결을 하지 못하고 있습니다. 현재 회원가입후에 로그인 진행할시 미인증유저의 authenticaion객체는 잘 들어오고 있으나, userDetailService가 null이라서 exception처리가 되고 있습니다. @Autowired가 가져올 수 없는 상태라고 생각하여 어노테이션 주입여부를 확인하였는데, 해당부분은 잘 입력이 되어져 있습니다.특히나 이상한 부분은 passwordEndcoder를 이미 다른곳에서 쓰고 있는데 CustomAuthenticationprovider 클래스 내부에서만 생성이 되지 않고 있습니다. 제가 무엇을 빼먹은 것인지 잘 모르겠어서 질문을 남깁니다.
- 미해결스프링 시큐리티
spriing boot 3 .acccess() 질문입니다.
spring boot 3 로 진행시 .access() 강의하신것처럼 값이 들어가지지않는데 어떻게 넣어야하나요?
- 미해결스프링 시큐리티
스프링부트 3버전 사용시 참고하세요
인텔리제이 사용하시면 http.authorizeRequests() <--- 아마 deprecated 됐다고 줄 그어져 있으실텐데 코틀린 버전으로 실습중이긴한데 이런식으로 사용하시면 됩니다.@Bean fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { http.authorizeHttpRequests() .requestMatchers("/").permitAll() .requestMatchers("/mypage").hasRole("USER") .requestMatchers("/messages").hasRole("MANAGER") .requestMatchers("/config").hasRole("ADMIN") .anyRequest().authenticated() .and() .formLogin() return http.build() }
- 미해결스프링 시큐리티
Method방식의 인가에서 궁금증이 있습니다.
안녕하세요.현재 지금 스프링 부트 2.6.14로 작성중에 궁금한 점이 있습니다. @Secured와 같은 메서드 방식에서 RoleHierarchy가 그대로 적용 되는지 궁금해서 질문드립니다. 혼자서 테스트 할때 ROLE_ADMIN > ROLE_MANAGER > ROLE_USER 구조로 RoleHierarchy를 구성하고 ROLE_ADMIN 권한을 지닌 아이디로 @Secured("ROLE_USER") 메서드를 호출하는데 인가가 안되는데 원래 안되는 것인지 아니면 되는 방향이 있는지 궁금하여 질문드리겠습니다. 감사합니다.
- 미해결스프링 시큐리티
DelegateFilterProxy 는 서블릿 컨테이너가 다른 프레임워크가 필터를 조작할 수 있게 만들어준 표준을 지키는 구현체인가?
서블릿 컨테이너는 스프링에 종속되지 않게 만들어졌다고 이해했는데요.어느정도 이러한 규제를 완화해주기 위해서 다른 프레임워크가 이용할 수 있는 필터 표준을 만들어줬고 이를 스프링 시큐리티가 구현한게 DelegatingFilterProxy 가 맞을까요?그러면 DelegatingFilterProxy 가 어떻게 Servlet Fitler 로 주입될 수 있을까요?
- 미해결스프링 시큐리티
강의 자료는 어디서 받나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 미해결스프링 시큐리티
SecurityResourceService.getResourceList() 관련질문
resourcesList.forEach(re -> { List<ConfigAttribute> configAttributeList = new ArrayList<>(); re.getRoleSet() .forEach(ro -> { configAttributeList.add(new SecurityConfig(ro.getRoleName())); result.put(new AntPathRequestMatcher(re.getResourceName()), configAttributeList); }); });가 아니라resourcesList.forEach(re -> { List<ConfigAttribute> configAttributeList = new ArrayList<>(); re.getRoleSet() .forEach(ro -> { configAttributeList.add(new SecurityConfig(ro.getRoleName())); }); result.put(new AntPathRequestMatcher(re.getResourceName()), configAttributeList); });이것이 강사님의 의도한바가 아니었을까 생각이 드는데제가 잘못 짚은걸까요?? 참고: 5) 웹 기반 인가처리 DB 연동 - FilterInvocationSecurityMetadataSource (2)
- 미해결스프링 시큐리티
SecurityContextHolder에 대한 질문
강의를 듣다 햇갈리는 부분이 있어 질문드립니다.사용자가 로그인 요청을 하여 인증에 실패하면 SecurityContextHolder.clearContext()를 호출하여 SecurityContextHolder를 초기화 하는 것으로 알고있습니다. 그렇다면 사용자A와 사용자B가 동시에 요청하였을 때 사용자A는 로그인에 성공하여 SecurityContextHolder에 저장되고 사용자B는 로그인에 실패하여 SecurityContextHolder.clearContext()를 호출하면 사용자 A의 정보 역시 삭제되는 것이 맞나요?또한 이러한 상황이 나올진 모르겠지만 사용자A의 인증 정보를 Session에 저장하기 전 위의 상황이 발생하여 Session에 사용자 A의 정보가 저장되지 않을 수도 있나요?마지막으로 여러 사용자가 동시에 요청했을 때 SecurityContext context = (SecurityContext) session.getAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY); 해당 구문으로 session에서 값을 찾으면 SPRING_SECURITY_CONTEXT_KEY라는 같은 키로 찾는데 어떻게 사용자를 구분할 수 있는지 궁금합니다.
- 미해결스프링 시큐리티
Security 의 에러 처리에 대한 문의
안녕하세요~~ 에러처리에 대한 작업을 하다가 궁금한 점들이 발생해서 문의를 남기게 되었습니다.개인적으로 실습을 해보던 중, AuthenticationFilter 를 적용하고 Exception 을 적용해서 실습을 해보고 있었습니다.그러다가 ExceptionTranslationFilter 에서 처리해주는 것이 오직 [인증 예외] 와 [인가 예외] 두 개밖에 없다는 점을 이해할 수 있었습니다. 그래서 인증 예외가 발생하면 FailureHandler 로 가고, FailureHandler 가 없을 경우에는 EntryPoint 로 가주는 것 같습니다.이 때, Security 내에서 일반 Exception 이 발생하면 어떻게 되는지 알 수 있을까요? AuthFilter 다음에 LoginFilter 가 있는데, LoginFilter 에서 ObjectMapper 가 exception 을 발생하게 되어서, 하나하나 다 따라가보니 그냥 throw 처리를 하고, 그 throw 를 바로 Response 에 작성하는 모습인 것 같았습니다. (Exception 도 맨 위로 가보니 IOException 이였습니다)https://mangkyu.tistory.com/204이런 블로그를 보면 Spring 의 예외처리 방식이 나와있는데, Security 에서 Spring MVC 로 넘어가지 않기 때문에 Security 에서 그냥 바로 에러를 Response에 작성하게 되는 걸까요? ================= 더 살펴본 다음에 남기는 사항LoginFilter 에서 난 에러이므로 따라가다 보니 결국에는 OncePerRequestFilter 가 에러를 처리하는 방식대로 가는 것 같습니다...
- 미해결스프링 시큐리티
프로젝트 홈 화면 페이지
홈 화면 대시보드 페이지에서 로고가 무슨 짓을 해도 안뜹니다.이 부분이요. 다른 페이지도 마찬가지인데 소스 확인해보고 올려주신 걸까요..?그게 아니라면 다른 화면이 뜨는게 정상인 걸까요? 다른 분들은 어떻게 뜨시는지 궁금합니다.
- 미해결스프링 시큐리티
Entity에 setter 사용 안할시 ModelMapper 설정
수강생분들에게 정보 공유해드리고 싶어서 게시판에 글 남깁니다. ModelMapper를 사용하면 객체에서 객체로 쉽게 변환할 수 있습니다.그런데 Setter를 사용하지 않은 Entity 또는 객체에서 Dto로 변환할 매핑되지 않는 문제가 발생합니다.이를 해결하기 위해서ModelMapper modelMapper = new ModelMapper(); modelMapper.getConfiguration() .setFieldAccessLevel(Configuration.AccessLevel.PRIVATE) .setFieldMatchingEnabled(true); 위와 같이 설정한뒤 사용하면 됩니다.^^ 저는@Bean public ModelMapper modelMapper() { ModelMapper modelMapper = new ModelMapper(); modelMapper.getConfiguration() .setFieldAccessLevel(Configuration.AccessLevel.PRIVATE) .setFieldMatchingEnabled(true); return modelMapper; }빈으로 등록해서 사용했습니다.ㅎㅎ InheritingConfiguration 클래스에서 ModelMapper 기본 fieldAccessLevel이 fieldAccessLevel = AccessLevel.PUBLIC; 임을 확인 할 수 있습니다.^^public class InheritingConfiguration implements Configuration { //...// /** * Creates an initial InheritingConfiguration. */ public InheritingConfiguration() { parent = null; typeMapStore = new TypeMapStore(this); converterStore = new ConverterStore(); valueAccessStore = new ValueAccessStore(); valueMutateStore = new ValueMutateStore(); sourceNameTokenizer = NameTokenizers.CAMEL_CASE; destinationNameTokenizer = NameTokenizers.CAMEL_CASE; sourceNamingConvention = NamingConventions.JAVABEANS_ACCESSOR; destinationNamingConvention = NamingConventions.JAVABEANS_MUTATOR; sourceNameTransformer = NameTransformers.JAVABEANS_ACCESSOR; destinationNameTransformer = NameTransformers.JAVABEANS_MUTATOR; matchingStrategy = MatchingStrategies.STANDARD; fieldAccessLevel = AccessLevel.PUBLIC; methodAccessLevel = AccessLevel.PUBLIC; fieldMatchingEnabled = Boolean.FALSE; ambiguityIgnored = Boolean.FALSE; fullTypeMatchingRequired = Boolean.FALSE; implicitMatchingEnabled = Boolean.TRUE; preferNestedProperties = Boolean.TRUE; skipNullEnabled = Boolean.FALSE; useOSGiClassLoaderBridging = Boolean.FALSE; collectionsMergeEnabled = Boolean.FALSE; } //...// } 참고하세용^^
- 해결됨스프링 시큐리티
Access Control List에 관한 질문입니다.
안녕하세요 정수원 선생님ACL 관련해서 뭔지만 알아볼려고 찾아보다가 굉장히 복잡하다는걸 알게되었는데이게 현업에서도 많이 쓰이는 방법인가요?
- 미해결스프링 시큐리티
csrfTokenRepo 관련 질문입니다.
안녕하세요 정수원 선생님 질문이 있습니다.httpSecurity .csrf().csrfTokenRepository(new HttpSessionCsrfTokenRepository()); 처럼 세션에 저장하는 경우에 응답으로 csrf token 관련 정보들이 response에 존재하지 않는데해당 경우에는 custom하게 필터를 만들어서 세션에 저장후 응답에 적절한 id(csrfJSessinID?) 를 넣어줘서나중에 검증할 수 있도록 해야하나요? client 입장에서는 어떻게 csrf token을 http 요청헤더에 넣을 수 있나요?
- 미해결스프링 시큐리티
WebSecurityConfigurerAdapter를 사용 못하는 경우
자유주제가 맞을 것 같은데, 보통 질문 찾아보실 거 같아서 해당 카테고리에 올려둡니다.작년 말, 스프링부트가 3.0 버전으로 올라오면서 WebSecurityConfigurerAdapter를 사용 못하게 된 것 같습니다.방법 1.build.gradle의 스프링 부트 버전을 2.7 이하로 낮추니 deprecated 상태로 쓸 수 있었습니다.방법 2.부트 버전을 낮추지 않고 3.0에서 쓰려면 아래와 같이 SecurityFilterChain을 Bean으로 쓰면 될 것 같습니다.참고: Spring Security without the WebSecurityConfigurerAdapter잘못된 내용이 있으면 댓글로 알려주세요!
- 해결됨스프링 시큐리티
익명사용자, remember-me 인증/인가 예외 질문
안녕하세요 수원님익명사용자, remember-me 인증, 인가 예외 관련하여 질문 드립니다. 9분 27초 쯤에 설명하신 내용을 아래와 같이 이해했는데 맞을까요? 익명사용자로 접근할 시익명 사용자 인증 객체가 생성되기 때문에(인증을 받지 않으면 익명 사용자 인증 객체가 생성됨) 인가 예외 발생remeber-mehttp.anyRequest().fullyAuthenticated(); 인 경우쿠키로 인증 처리를 하는 remember-me 인증 방식은 인증 예외를 발생(id, password로 하는 완전한 인증이 아니기 때문)remember-me 토큰 만료http.anyRequest().fullyAuthenticated(); 또는http.anyRequest().authenticated();과 상관없이 인증예외 발생 주신 자료를 정리하면 다음과 같습니다. 감사합니다.
- 미해결스프링 시큐리티
섹션5-2 admin 비밀번호가 1111이 아닌가요?
깃허브 브랜치 ch05-01을 받아와서 그대로 실행했는데요 수업 2분40초에 나오는것처럼 admin, 1111 로그인을 하려하니 invalid username or password가 나옵니다. db에 확인해보면 admin아이디는 분명 들어가 있는데 비밀번호가 잘못된걸까요?수업 듣는 시간보다 코드 찾고 하는 시간이 더 오래 걸려 너무 힘드네요..
- 해결됨스프링 시큐리티
12) 예외 처리 및 요청 캐시 필터 9:27 초 질문입니다.
안녕하세요 정수원 선생님아래 질문글을 읽다가 김또깡님이 anonymous로 인증된 것은 인가가 아직 안되었으니 ExceptionTranslationFilter catch 문에 걸리는게 이해가 간다하셨지만remember me 로 인증된 요청은 왜 인증예외로 빠지게 되는가 질문한글을 보았습니다. 9:27에 말씀하실려는 의도가 remember me 토큰이 변경되어서 RememberMeAuthenticationFilter에서 rememberMeServices.autologin을 실패하여 ExceptionTranslationFilter의 catch문으로 간다는것을 말씀하신건가요?아니면 김또깡님 질문에 답변주신 Fully Authenticated 랑 관련이있는것인가요?제가 실제로 해보니 remember me 로 인증된 요청이 ExceptionTraslationFilter로 catch문으로 안가고 remember me token이 변경되었을때만 가길레 혹시 놓친게 있나해서 문의 남깁니다.
- 미해결스프링 시큐리티
Session 과 SecurityContext에 관련된 질문입니다.
안녕하세요 선생님 질문이 있습니다.다른 질문들을 읽어보니 인증관련 관계도를 보면 이렇습니다.Session > SecurityContext > Authentication > UserDetials 입니다.+ 그리고 스프링 시큐리티에서 SecurityContext 에 인증객체를 저장하는 것은 세션과는 아무런 상관이 없습니다.SecurityContextHolder > ThreadLocal > SecurityContext > Authentication > UserDetails 이러한 관계도를 가진다고 말씀해주셔서 디버깅 해보니 인증을 성공한 시점에 request.getSession에서 attribute로 SecurityContextImpl 을 들고 있다는것을 확인하였습니다.궁금한 것은 spring security에서 SecurityContext에 인증객체를 저장하는것은 세션과 아무런 상관이 없다는것이 session은 attributes에 들고 있고SecurityContextHolder는 threadlocal에 들고 있으니 그냥 각각 다른 저장소에 같은것을 저장할 뿐이다. 그래서 아무런 상관이 없다.라고 이해하면 맞을까요?
- 해결됨스프링 시큐리티
rememberme token key에 관한 질문입니다.
안녕하세요 선생님 질문이 있습니다.TokenBasedRememberService#processAutoLoginCookie 과정에서String expectedTokenSignature = makeTokenSignature(tokenExpiryTime, userDetails.getUsername(), userDetails.getPassword()); if (!equals(expectedTokenSignature, cookieTokens[2])) { throw new InvalidCookieException("Cookie token[2] contained signature '" + cookieTokens[2] + "' but expected '" + expectedTokenSignature + "'");위와 같이 해당 RemeberService가 생성되었을시 주입받은 key를 가지고 md5 방식으로 tokenSignature를 만드는것을 확인하였습니다. 이것을 받아온 rembemer me token하고 비교하는 것을 확인하였습니다. 질문이 2개입니다.1) 이 과정을 거쳐서 만든 RememberMeAuthenticationToken 은 왜 아직 ProviderManager.authenticate를 거치지도 않았는데 authenticated=true인것 인가요? 2) 위의 인증객체(RememberMeAuthenticationToken )를 인증할때 RememberMeAuthenticationProvider#authenticate에서 key값을 추가적으로 비교하는 이유가 다른 질문을 찾아보니 "그리고 RememberMeServices 인터페이스를 커스텀하게 자체 기능을 구현할 수 있기 때문에 이 때에도 위와 같은 인증단계의 규칙을 거치게 함으로서 상호간 key 가 일치하지는 여부를 체크하기 위함이기도 합니다."하셨는데 key가 달라도 MD5digest해서 나온 값이 같을 수도 있어서 추가적으로 검증한다고 이해하면 되나요?