수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 시큐리티
AbstratSecurityInterceptor에서의 Event의 용도가 궁금합니다
// AbstractSecurityInterceptor.class private void attemptAuthorization(Object object, Collection<ConfigAttribute> attributes, Authentication authenticated) { try { this.accessDecisionManager.decide(authenticated, object, attributes); } catch (AccessDeniedException ex) { if (this.logger.isTraceEnabled()) { this.logger.trace(LogMessage.format("Failed to authorize %s with attributes %s using %s", object, attributes, this.accessDecisionManager)); } else if (this.logger.isDebugEnabled()) { this.logger.debug(LogMessage.format("Failed to authorize %s with attributes %s", object, attributes)); } publishEvent(new AuthorizationFailureEvent(object, attributes, authenticated, ex)); throw ex; } } 여기서 publishEvent를 진행하는데요, 제가 이해한 바로는 ExceptionTranslationFilter에서 try-catch로 작업을 진행하기 때문에, 해당 로직(예외처리)에는 불필요해보이는 로직이라 생각합니다.이 부분의 역할에 대해 궁금증이 생겨 질문 남깁니다!코드를 분석해봤을 때에는, LoggerListener에서 이 이벤트를 로그로 작성해주고 있는데, 해당 부분만을 별도의 로그 관리로 진행하는지?에 대해서도 의문이남네요!
- 미해결스프링 시큐리티
Form 기반 인증의 장점?
안녕하세요! 저희가 이전에 vue.js와 같은 SPA 기반의 Frontend 페이지를 구현하고 springboot rest-api로 데이터 통신을 하면서 인증은 JWT Token 기반으로 인증을 수행했었습니다.(Interceptor를 통해 Token 유효성 검증) 서버에서 별도의 세션 관리를 하지 않은 장점도 있었던것 같습니다. 새로운 프로젝트를 할때 form 기반의 인증을 검토중입니다. 아직 전부다 공부하지 못해 이해가 부족하여 질문 드립니다. 질문) front와 server가 분리된 구조에서 form 기반의 security 인증의 장점이 궁금합니다. 감사합니다.
- 미해결스프링 시큐리티
Ajax방식에서 SavedRequest 가능여부
안녕하세요 강사님, 강의듣다가 궁금한게 생겨서 문의드립니다. 폼 로그인 방식에는 successHandler에 RequestCache를 통해 미인증 사용자가 접근했던 정보로 리다이렉트 했었는데 Ajax 통신에서는 success블럭에 window.location을 통해 이동하는 걸로 보여집니다. (초반엔 "/"였다가 19:07 에는 "/messages"로 변경되어있습니다.) REST 환경이 아니라 해당 예시처럼 Ajax 통신 시 RequestCache 이용 가능한지 궁금합니다.
- 미해결스프링 시큐리티
loginPage("/login").permitAll() 오류
안녕하세요 loginPage("/login").permitAll(); 라인중 permitAll() 추가할 경우 아래와같이 오류가 발생하는데요... 원인을 모르겠습니다. 무슨 문제때문인지 힌트를 얻을 수 있을까요? java: 11 spring boot : 2.6.1 UserDetailsService userDetailsService;@Overrideprotected void configure(HttpSecurity http) throws Exception { http .authorizeHttpRequests() .anyRequest().authenticated(); http .formLogin() .loginPage("/login").permitAll(); http .rememberMe() .rememberMeParameter("remember") .tokenValiditySeconds(3600) .userDetailsService(userDetailsService); Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2021-12-05 15:36:54.966 ERROR 4156 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springSecurityFilterChain' defined in class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' threw exception; nested exception is java.lang.IllegalStateException: permitAll only works with HttpSecurity.authorizeRequests() at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658) ~[spring-beans-5.3.13.jar:5.3.13] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:486) ~[spring-beans-5.3.13.jar:5.3.13] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.13.jar:5.3.13]
- 미해결스프링 시큐리티
파라미터가 넘어오지 않습니다..
안녕하세요. 강의를 듣고 개인적으로 실습을 해보고 있습니다. 그런데 FailureHandler 클래스파일 까지는 가는데 컨트롤러에 파라미터값이 넘어가질 않습니다.. 혹시 무엇이 잘못되었는지 확인해 주실 수 있으신가요? 제가 계속 해보니 처음에 비밀번호를 틀린 상태로 로그인을 시도하면 파라미터가 넘어가지 않고, 한번 비밀번호를 틀린 후 정상적인 비밀번호를 통해 로그인을 시도하면 로그인이 되지 않고 error, exception파라미터가 넘어갑니다. 그런데 이때는 FailureHandler 클래스를 거치지 않습니다.. 무었때문에 그런지 잘 모르겠습니다..
- 미해결스프링 시큐리티
9) 동시 세션 제어, 세션 고정 보호, 세션 정책 에 대해 문의 드립니다.
안녕하세요. 강의 내용 잘보고 있습니다. 다름이 아니라 9) 동시 세션 제어, 세션 고정 보호, 세션 정책 에서 동시 세션 제한설정을 하는데 동일한 아이디로 두번로그인 하는것이 잘 차단되지 않는것 같습니다. http .sessionManagement() .maximumSessions(1) .maxSessionsPreventsLogin(true) 와 같이 하였는데도 불구하고 않되네요. 다른 옵션과 충돌나는 부분이 있는건가요? 혹시 가능하시면 동작하는 git 소스를 구할 수 있을까요? 인터넷 검색해도 비슷하게 동작하지 않는다고 나오는데.. 잘모르겠네요..
- 미해결스프링 시큐리티
안녕하세요 선생님~ AuthenticationEntryPoint 관련하여 질문 있습니다!
안녕하세요 선생님~ 유익한 강의 만들어주셔서 감사합니다 :) 다름이 아니라, 제가 JWT와 연동하여 프로젝트를 진행중에 있는데 알수없는 현상이.. 나타나서ㅠㅠ 질문드립니다.. 현재 JWT으로 인증을 받고, 토큰이 유효하지 않으면 LoginPage로 리다이렉션하기 위해 AuthenticationEntryPoint를 커스텀하여 사용하고 있습니다. 브라우저를 통해 하면 토큰생성 및 인증처리도 정상적으로 잘 되나,, 신기한게,, 토큰을 담은 쿠키를 확인하려고 브라우저(크롬, 사파리) 개발자도구를 키면 바로 AuthenticationEntryPoint를 호출하는 로그를 볼 수 있었습니다. (토큰이 유효한데도 개발자도구만 키면 넘어갑니다..) @Componentpublic class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint { @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { response.sendRedirect("/user/login?error='Not ValidToken'&exception='Login Again!'"); }} 혹시.. 의심가는 증상이 있으신가요 선생님ㅠㅠ 저 현상이 일어나고 바로 개발자도구를 끄고 다시 페이지 리로드하면 앤트리포인트의 로그는 찍히지 않습니다..ㅠㅠ 선생님의 강의 덕분에 많은 공부를 하고있습니다. 늘 감사합니다!
- 미해결스프링 시큐리티
sessionManagement()에 대해서 질문이 있습니다.
안녕하세요. 선생님 좋은 강의 만들어 주셔서 정말 잘듣고 있습니다. 제가 궁금한점은 하나의 브라우저에서 여러개의 계정으로 로그인 하고 싶어서 http.sessionManagement().maximumSessions(-1); 위와 같이 하였을때 하나의 브라우저에서 여러 계정에 접속을 했을 경우 접속은 가능하나 만들어 놓은 메뉴를 클릭하면 마지막으로 접속한 계정으로 변경되는데 각자 유지하기 위해 설정해줘야 하는 부분이 있을까요?
- 미해결스프링 시큐리티
CustomAuthenticationProvider 질문입니다.
안녕하세요. 이번 강의를 들으면서 질문하고자 하는 내용은 바로 앞 강의 CustomUserDetailsService 구현만으로 로그인이 정상적으로 되는지 안 되는지 체크를 해 주었는데, 이번 강의에서는 CustomAuthenticationProvider 를 사용해서 입력 비밀번호와 디비 저장 비번을 matches 로 비교를 직접하셨는데요. 기능적으로 두 강의의 차이를 모르겠어요. 그럼 실제 사이트에서 로그인 로직을 만들때는 CustomUserDetailsService, CustomAuthenticationProvider 모두를 구현해 줘야 하는건가요? 감사합니다. ^.^
- 해결됨스프링 시큐리티
RolVoter관련하여 질문이 있습니다.
강사님 안녕하세요. 강의를 듣다가 17:40 즈음에 getAccessDecisionVoters를 Arrays.asList(new RoleVoter());로 하셨는데 RoleVoter는 WebExpressionVoter와 같이 AccessDecisionVoter의 구현제 종류 중 하나인가요? 만약 그렇다면 getAccessDecisionVoters에 RoleVoter가 아닌 WebExpressionVoter를 넣어도 되는건가요? WebExpressionVoter가 아닌 RoleVoter를 사용하신 이유가 따로 있나요? RoleVoter만 return으로 하신 이유는 뒤에 나오는 Hierarchy나 IpAddress와 같은 추가적인 Voter를 아직 추가하지 않았기 때문인가요? 실제 프로젝트에서도 추가적인 Voter를 사용하지 않는다면 저런식으로만 구현해도 괜찮을까요? 항상 친절한 답변 감사합니다 !
- 미해결스프링 시큐리티
암호화 타입을 변경할려면 어떻게 해야 하나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강의 잘 듣고 있습니다. 기본이 bcrypt 인데 이걸 md5 로 변경해서 암호화 할려면 어떻게 해야 하나요? 감사합니다. ^.^ public static PasswordEncoder createDelegatingPasswordEncoder() { String encodingId = "bcrypt"; Map<String, PasswordEncoder> encoders = new HashMap(); encoders.put(encodingId, new BCryptPasswordEncoder()); encoders.put("ldap", new LdapShaPasswordEncoder()); encoders.put("MD4", new Md4PasswordEncoder()); encoders.put("MD5", new MessageDigestPasswordEncoder("MD5")); encoders.put("noop", NoOpPasswordEncoder.getInstance()); encoders.put("pbkdf2", new Pbkdf2PasswordEncoder()); encoders.put("scrypt", new SCryptPasswordEncoder()); encoders.put("SHA-1", new MessageDigestPasswordEncoder("SHA-1")); encoders.put("SHA-256", new MessageDigestPasswordEncoder("SHA-256")); encoders.put("sha256", new StandardPasswordEncoder()); encoders.put("argon2", new Argon2PasswordEncoder()); return new DelegatingPasswordEncoder(encodingId, encoders);}
- 해결됨스프링 시큐리티
FactoryBean관련해서 질문이 있습니다.
강사님 안녕하세요. 매번 질문만 하게 되는데 답변 친절히 해주셔서 감사합니다 ㅠ 강의를 보면서 궁금한 점이 있었는데 우선 첫번째로, FactoryBean으로 Map객체를 구현하는 이유가 있을까요? 만약 저에게 구현해보라고 한다면, UrlFilterInvocationSecurityMetadataSource에서 데이터들을 가져와서 한번에 했을 것 같은데.. 뭐 이런식으로.. FactoryBean으로 구현하신 이유는 DefaultFilterInvocationSecurityMetadataSource와 최대한 비슷하게 구현하기 위해서 그렇게 하신건가요? 두번째로, UrlResourceMapFactoryBean에서 if (resourceMap == null ) { init( ) }이라고 하셨는데, 이렇게 하신 이유가 무엇때문에 그런건가요? resourceMap은 호출때마다 DB에서 불러와야 하는 것 아닌가요? 항상 감사합니다 ..
- 해결됨스프링 시큐리티
안녕하세요 정수원강사님 session 관련 질문드립니다!
안녕하세요 강사님 좋은강의 항상 감사합니다. 굉장히 초보적인 질문일 수 있음에 죄송스럽습니다. 다름이 아니라 form login을 진행하게 되면 서버의 session에 사용자가 저장이 되고 이것을 이용해서 권한까지 검사하는 것으로 알고있는데요, 그런데 ajax로 api/messages로 접근을 할 때 미리 로그인되었다는, 다시말해 클라이언트와 서버가 서로 jsessionId를 전송하지 않는 것처럼 보이는데 POST로 로그인 후 GET api/messages를 할 때 서버는 이용자를 어떻게 구분하나요? 답변 미리 감사드립니다 ^_^
- 해결됨스프링 시큐리티
안녕하세요 강사님 antMatchers 질문드립니다!
안녕하세요 정수원 강사님 항상 수업 잘듣고있는 학생입니다. 3) 사용자 DB 등록 및 PasswordEncoder 강의 수강중 20:42 에서 서버 기동후에 편집이 되었는지 이후 20:55에 SecurityConfig 의 http.antMatchers() 파라미터로서 "user/login/**" 패턴이 새로 추가된 것이 보여집니다. 사실 10) 인증 실패 핸들러 : CustomAuthenticationFailureHandler 강의를 듣는 과정까지 해당패턴을 추가하지 않고 .antMatchers("/", "/users", "/login*").permitAll() 상태로 진행을 하였는데 딱히 에러가 발생하거나 하는부분을 겪지못했습니다.(제가 제대로 실습을 따라가지 못했을 가능성이 존재합니다..ㅠ) 결과적으로 "user/login/**" 패턴을 추가하신 이유가 무엇인지 궁금합니다. 추가로 antMatchers로써 추가해주는 패턴이라는 것이 클라이언트가 요청하는 URL만을 검사해주고 (ex: GetMapping("/ex"..)) 모델뷰로 반환하여 렌더링해주는 뷰의 경로까지는 검사해주지 않는지 혹은 뷰의 경로까지 검사하기 때문에 해당 뷰 경로까지 패턴으로 넣어주어야 하는것인지 궁금합니다. (사실 web.Ingnoreing을 통해 평소 시큐리티가 정적자원을 검사해주는 것까지는 이해하였는데 스프링에서 뷰를 렌더링해줄때도 시큐리티가 적용이 되는지 궁금한것인데 최대한 상세하게 질문드리려 하니 글이 길어졌습니다.) 항상 좋은강의 감사드리며 답변기다리겠습니다. 감사합니다!
- 해결됨스프링 시큐리티
안녕하세요 항상 감사한 정수원강사님
안녕하세요. 항상 강의 잘듣고있는 학생입니다. 스프링 시큐리티보단 스프링 프레임워크 질문쪽에 조금 더 가까울 것같아 미리 양해드립니다. 이 부분에서 userDetailsService 를 상속받는데 CustomUserDetailsService클래스의 빈네임을 @Service("userDetailService")로 따로 지정하지 않고 @Service 만 선언해주어도 따로 에러가 나지 않는 것으로 보여지는데, 왜 이런 부분이 가능한지가 궁금합니다. 또 추후 문제가 발생할 여지가 있는지도 궁금합니다. 항상 좋은 강의 감사합니다.
- 미해결스프링 시큐리티
강사님 강의자료 인용에 대해
개인적으로 공부를 정리하는 블로그가 있는데요 강의 ppt 사진같은 부분을 인용하여 작성하여도 괜찮으실까요 ??
- 미해결스프링 시큐리티
어떠한 차이가 있는지 궁금합니다.
defaultSuccessUrl syccessHandler failureUrl failureHandler 각각에 메소드가 둘중하나만 써도 될거같은데 두개 다 쓰신 이유를 모르겠습니다!!..
- 해결됨스프링 시큐리티
로그아웃 관련하여 질문이 있습니다.
ContextHolder에서 authentication객체를 가져오셔서 이것을 넘기면서 logout처리를 하셨는데 ContextHolder는 세션에 의해서 관리되고 있는 건가요? 그렇다면 세션 하나당 contextholder 하나가 들어가 있는 건가요?
- 해결됨스프링 시큐리티
CustomAuthenticationProvider관련해서 질문드립니다.
안녕하세요 강사님. 강의 잘 듣고있습니다. CustomAuthenticationProvider 클래스에서 이렇게 하셨는데 이렇게 하지 않은 이유는 인증객체가 User보다 Account객체가 더 의미 있어서 그런가요? 그리고 Account객체의 변수가 username, password 뿐만아니라 email, phonNumber등 다양할 때 ContextHolder에서 나중에 꺼내올때 사용하기 편하기 위해서 그런건가요?
- 미해결스프링 시큐리티
AccountContext관련해서 질문드립니다!
아래의 질문의 답변 중에 "Account가 엔티티가 아닌 일반 객체라고 한다면 굳이 AccountContext없이 Account클래스를 UserDetails 타입으로 구현해서 사용하셔도 크게 상관없습니다"라고 하셨는데 이 경우에는 AccontDto를 UserDetails로 구현해도 된다 라고 생각해도 될까요?