월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 시큐리티
커스텀 로그인 페이지를 등록할 경우 LogoutFilter의 등록 여부 질문
안녕하세요 기선님. 강의 듣다가 질문이 생겨 질문 올립니다!http.formLogin().loginPage("/singin"); 과 같이 커스텀 로그인 페이지를 등록할 경우, DefaultLoginPageGeneratingFilter는 등록되지 않는게 맞는데, 강의 3:41초화면을 보면 LogoutFilter는 등록이 되어있는 것 같습니다. (GPT에 질문했을 때에도, LogoutFilter의 등록 여부와는 관련이 없다고 나옵니다.)이부분 확인 부탁드리겠습니다.혹시 이후 강의에서 이 부분을 정정해주셨다면, 죄송합니다.
- 미해결스프링 시큐리티
anonymousClass를 사용하는 이유
AnonymousAuthenticationFilter 학습에서4분 9초에 36번째 라인에서 anonymousClass를 정의할 때 Class 타입으로 정의하는 이유가 무엇인가요?? Class 타입으로 정의하면 어떤 장점이 있나요?
- 미해결스프링 시큐리티
ExcpetionTranslationFilter가 FilterSecurityInterceptor에서 발생하는 예외만 처리하는 이유
혹시 저처럼 ExcpetionTranslationFilter가 다른 필터의 예외는 처리하지 않고 FilterSecurityInterceptor에서 발생하는 예외만 처리할 수 있게 한 방법이 궁금하신 분들을 위해서 씁니다.ExcpetionTranslationFilter는 필터체인에서 순서상 14번째고FilterSecurityInterceptor는 15번째 맨 마지막입니다.ExcpetionTranslationFilter가 하위 순서에 있는 모든 필터의 예외를 처리하기 때문에 자기보다 하위 순서에 있는 FilterSecurityInterceptor의 예외를 처리할 수 있습니다만약 16번째 17번째 필터가 더 있었으면 그 필터들도 ExcpetionTranslationFilter에 의해 예외 처리가 될 수 있습니다(던지는 예외가 AuthenticationException 또는 AccessDeniedExcpetion이라면)
- 해결됨스프링 시큐리티
Principal 인터페이스와 User 클래스의 관계
안녕하세요. 강의를 듣던 중 해결되지 않는 의문이 생겨 질문드립니다.강의에서 Principal 은 인터페이스이며 UserDetailsService에서 반환한 User 클래스가 구현체로 사용된다고 말씀해주셨는데 여기서 의문이 생겼습니다.확인해보니 Principal은 User 클래스의 인터페이스가 아닌 Authentication 의 구현체로 사용되는 UsernamePasswordAuthenticationToken 의 최상위 인터페이스였습니다.하지만 Authentication에서 User 객체를 받아오는 메서드의 이름도 getPrincipal() 입니다. 그렇다면, 위 그림에서 나타난 Principal 인터페이스와 User 객체를 반환하는 getPrincipal()의 principal은 서로 다른 의미로 쓰이는 건가요?디버깅을 해봐도 아래와 같이 Principal 인터페이스를 구현하는 XxxAuthenticaionToken 객체가 Authentication 타입으로 받아지고 User 객체는 그냥 Object 타입으로 받아져서 혼동이 되어 질문드립니다.
- 미해결스프링 시큐리티
passwordEncoder 질문드립니다.
PasswordEncoderFactories.createDelegatingPasswordEncoder();를 사용하면 PasswordEncoder mapped for the id "null" 이 발생합니다. NoOpPasswordEncoder는 정상작동 되는데 이유를 모르겠습니다.
- 미해결스프링 시큐리티
WebSecurityConfigurerAdapter is deprecated 가 불편하신 분들을 위해
우선 참고하셔야할 링크 https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter 1. HttpSecurty http << 오버라이드 대신 @Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeRequests() .mvcMatchers("/", "/info", "/account/**").permitAll() .mvcMatchers("/admin").hasRole("ADMIN") .anyRequest().authenticated(); http.formLogin(); http.httpBasic(); return http.build();} 2. inmemory 유저 추가 @Beanpublic InMemoryUserDetailsManager userDetailsService() { UserDetails user = User.withUsername("user") .password("{noop}123") .roles("USER") .build(); UserDetails admin = User.withUsername("admin") .password("{noop}123") .roles("ADMIN") .build(); UserDetails[] userDetails = new UserDetails[2]; userDetails[0] = user; userDetails[1] = admin; return new InMemoryUserDetailsManager(userDetails);} 굳이 배열로 안하고 그냥 다 써도 되는듯 해용 @Bean 잊지 않기
- 미해결스프링 시큐리티
왜 스프링은 userid가 아니고 username을 사용했을까요?
중요한건 아니지만... 궁금해서 여쭤봅니다. username에 다른 식별 가능한 값을 전달하여 조회한다는 것은 이해했습니다. 그런데 동명이인의 개념이 있는데 id 같은 개념이 아닌 name을 사용한건 왜 그런걸까요? 혹시 아시나요? 로그인 ID를 일반적으로 username으로 생각하는 건가요? 실제 개발 소스를 개념상의 사용자명을 코딩한 상황을 봤어서요. (잘못된 소스) 비슷한 질문이 있긴 하네요. https://stackoverflow.com/questions/48268945/why-spring-security-is-based-in-username-instead-of-user-id#:~:text=In%20spring%20security%2C%20UserDetails%20uses,number%2C%20facebook%2C%20etc).
- 미해결스프링 시큐리티
무상태성
안녕하세요. 백기선선생님 강의내용을 아래와 같이 정리했습니다. - Authentication 인증객체는 SecurityContext에 저장됨. - HttpSession에 SecurityContext가 캐싱됨. 질문 쿠키-세션방식에서는 모든 사용자의 인증정보를 서버측 세션에 보관했지만 이를 개선한 방식이 jwt토큰방식으로 알고 있습니다. 그런데 jwt토큰으로 인증을 마치고 나면 인증정보가 SecurityContext에 저장되고 이 SecurityContext도 세션에 캐싱되니 결론적으로 jwt방식도 로그인한 모든 사용자의 인증정보를 서버에 저장하게 되는 꼴이 아닌가 생각됩니다. 위 내용중에 잘못된 부분이 있으면 조언부탁드립니다. 감사합니다!
- 해결됨스프링 시큐리티
로그인 후 로그인 페이지 접속
스프링 시큐리티에서 별도로 로그인 후에 로그인 페이지 접속을 제한하는것은 없는건가요? 로그인 컨트롤러에서 principal을 통해 리다이렉트하는 방법 밖에 없는걸까요?
- 미해결스프링 시큐리티
AuthenticationException은 어떤 경우에 발생하는지
AccessDeniedException은 예시를 보여주셔서 예외가 발생하는 경우를 알겠는데 AuthenticationException은 어떤 경우에 발생하는지 잘 모르겠습니다 ㅜㅜ
- 미해결스프링 시큐리티
AccountService에 비밀번호
AccountService에 비밀번호를 확인하는 기능은 없는건가요??id만 비교하고 pw는 없는것 같아서요...
- 해결됨스프링 시큐리티
커스텀 어노테이션 의 `커스텀 value` 설정방법에 관한 질문입니다.
강사님 안녕하세요^^커스텀 어노테이션은 어노테이션을 묶는 기능 외, 사용자정의 값을 지정할 수는 없을까요?질문:위와 같이 작성된 어노테이션에서 (username = "mockUser", roles = "USER") 이 부분을 아래처럼 사용하는 곳에서 설정할 방법이 없을까요?@Test @WithUser(username = "mockUser", roles = "USER") void adminPageToUnauthorizedUser() throws Exception { ... }( S.Security 가 제공하는 @WithMockUser 자체(관련 프록시)의 기능을 커스터마이징 해야 되는건가요? The Java8 강의에서 `@ChickenContainer` 어노테이션 역시 묶는 형태로 사용되었지만, 질문하기 애매해서, 이곳에 딱 좋은 사례가 있어 여기다 남기게 되었구요, 있을법도 할텐데, 아직 방법을 모르겠습니다 )혹시 방법이 있을까요? 읽어주셔서 감사합니다.
- 해결됨스프링 시큐리티
passwordEncoder 빈 생성 시 차이
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 스프링 시큐리티 공부중인데 아래 두가지 passwordEncoder 빈 생성 시 차이가 무엇인지, 성능 차이 또는 동작방식 차이가 있는지 궁금합니다. 참고로, 아래 링크를 보고 궁금한 점이 생겼습니다. https://github.com/f-lab-edu/daangn-market-used-trading/pull/67/commits/ed0476f1646a6b4b21e196d64b3585604be73c98 감사합니다. @Configurationpublic class SecurityConfig { @Bean public PasswordEncoder passwordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); }} @Configurationpublic class SecurityConfig { @Value("${security.bcrypt.strength}") private int strength; @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(strength); }}
- 미해결스프링 시큐리티
Bean 등록 관련 질문입니다.
Bean 등록을 SecurityConfig 가 아니라 스프링부트 어플리케이션에서 하시는 이유가 있나요?
- 미해결스프링 시큐리티
시큐리티 전략관련
최근에 파일기능 추가로 기존 공통을 안건드리기 위해서 스프링 설정파일에서 스프링과 별도로 서블릿 컨텍스트를 만들었는데요!! 테스트 서버에서는 세션 유지가 되어 기능이 되던 것이, 운영에서는 세션이 끊기더라구요. 강의에서 배운 시큐리티의 전략을 바꾸는 방법이 위의 문제해결방법에 해당할지가 궁금합니다. 질문 정보가 부족하다면 말씀해주세요!!
- 미해결스프링 시큐리티
브라우저 기반 요청이 클라이언트의 요청을 처리 -> 의 의미?
안녕하세요. 강의자료에 써있는 내용중 "보통, 브라우저 기반 요청이 클라이언트의 요청을 처리할 때 자주 사용." 이라고 적혀있는데 문장만으로 어떤 내용인지 잘 이해가 가지 않습니다. 어떤 경우에 자주 사용하는 것인지 조금 더 풀어서 설명해주실수 있을까요?
- 미해결스프링 시큐리티
AccountControllerTest 실행오류
안녕하세요. 알려주신대로 index 메서드의 두번째 파라미터에@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : account") Account account를 넣은 이후, AccountControllerTest를 돌렸을 때, 아래와 같은 오류가 나오고있는 상황입니다. @AuthenticationPrincipal UserAccount userAccount를 두번째 파라미터로 넣으면 잘 동작합니다. @GetMapping("/") public String index(Model model, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : account") Account account) { if ( account == null ) { model.addAttribute("message", "Hello Spring Security"); } else { model.addAttribute("message", "Hello, " + account.getUsername()); } return "index"; } 오류 로그 Request processing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'account' cannot be found on object of type 'org.springframework.security.core.userdetails.User' - maybe not public or not valid?org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'account' cannot be found on object of type 'org.springframework.security.core.userdetails.User' - maybe not public or not valid? 이 경우, 테스트 코드를 바꿔줘야 할 부분이 있는건가요?? 바쁘시겠지만 확인해주시면 감사하겠습니다.
- 미해결스프링 시큐리티
알려주신대로 설정을 해도 다시 302요청을 보냅니다....
디버그 해봤을때 favicon요청의 필터사이즈는 0이었는데 다시 /error요청이 들어옵니다.ㅠㅠㅠ 왜 /error 요청이 다시 들어오는지 모르겠습니다 @Configurationpublic class SecurityConfig extends WebSecurityConfigurerAdapter { public DefaultWebSecurityExpressionHandler expressionHandler() { RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl(); roleHierarchy.setHierarchy("ROLE_ADMIN > ROLE_USER"); DefaultWebSecurityExpressionHandler handler = new DefaultWebSecurityExpressionHandler(); handler.setRoleHierarchy(roleHierarchy); return handler; } @Override public void configure(WebSecurity web) throws Exception { web.ignoring().mvcMatchers("/favicon.ico"); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .mvcMatchers("/", "/info", "/account/**").permitAll() .mvcMatchers("/admin").hasRole("ADMIN") .mvcMatchers("/user").hasRole("USER") .anyRequest().authenticated() .expressionHandler(expressionHandler()); http.formLogin(); http.httpBasic(); }}
- 미해결스프링 시큐리티
voter에 대해 질문이 있습니다.
accessmanager에 있는 voter는 http요청에서 요구하는 role과 인증된 authetication의 role를 비교하여 인가여부를 결정한다고 하셨는데 그렇다면 voter가 리스트형태로 여러개 있는 이유는 각 voter별로 지원할 수 있는 role의 종류나 authentication구현체의 종류가 다르기 때문인가요??
- 미해결스프링 시큐리티
제가 맞게 이해한것인지 궁금합니다.
authenticationmanager는 사용자가 입력한 authentication객체를 인증할수 있는 autheticationprovider를 찾아주고 해당 provider는 userdetailsservice가 반환한 userdetail를 바탕으로 비번일치유무로 인증을 하고 일치한다면 authenticationmanager는 autheticationprovider가 반환한 authentication(principal 변수에 userdetail를 담음)를 getmaapin 메서드에 principal매개변수로 넘겨주는것이 맞나요?