월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 시큐리티
Spring security test 수행시 @AuthenticationPrincipal 가 null 로 세팅됨
안녕하세요 아래와 같이 Controller, 테스트 코드를 작성했습니다. 어플리케이션을 수행하고 로그인했을때는 정상적으로 사용자 정보가 출력이 되는데요 아래와 같이 테스트 코드를 수행했을때는 @AuthenticationPrincipal user 가 null 로 매핑이 됩니다. 해결 방법이 있을까요? @GetMapping(path="test") public String index(@AuthenticationPrincipal UserAccount user) { log.info(user.getUser()); return "/index"; } @Test public void index() throws Exception { // Given, When, Then mockMvc.perform(get("/test") .with(user("user").password("pwd").roles("USER"))) .andExpect(status().isOk()) .andExpect(authenticated()) ; }
- 미해결스프링 시큐리티
Spring security Multi 인증 문의드려요
강사님 안녕하세요 하나의 어플리케이션으로 관리자/사용자 형태로 구분해서 Spring security 세팅 하려고 합니다. 크게는 관리자와 사용자 2개의 인증을 별도로 태우려고 해요 - entity : User , Admin - UserDetailsService : UserService, AdminService - WebSecurityConfigurerAdapter - UserSecurityConf : - 우선순위 낮음 - /user/** 요청만 검증, - /user/login : 로그인 페이지 - AdminSecurityConf - 우선순위높음 - /admin/** 요청만 검증 - /admin/login : 로그인 페이지 대부분 원하는대로 동작이 되지만 세션을 같이 써서 문제가 발생하는것 같습니다. 예를 들어 user 로 정상 로그인 후에 admin 계정으로 로그인하게 될대 403 Forbidden 에러가 발생하네요 세션을 구분해서 관리할수 있는 방법이 있을까요?
- 미해결스프링 시큐리티
ProviderManager 문의
인증객체를 처리할 수 있는 provider가 없으면 ProviderManager 에서 .parent.authenticate(authentication); 통해 Parent providerManager에서 인증을 요청한다고 했는데 어떤 class가 Parent providerManager 인가요? 그리고 부모 providerManager는 어떻게 DaoAuthenticationProvider 설정이 되는 건가요? 이클립스라서 그런지 수업처럼 시큐리티 라이브러리 디버그가 잘 안되네요.
- 미해결스프링 시큐리티
UserDetailsService 가 DaoAuthenticationProvider 에 어떻게 주입 되는지 알 수 있을 까요?
DaoAuthenticationProvider 에서 저희가 작성한 UserDetailsService 를 사용하는 부분 까진 이해를 했습니다. 그런데 이 Provider에 저희가 작성한 UserDetailsService 가 주입 되는 부분은 어디서 확인할 수 있나요? Provider가 어떻게 해서 개발자가 직접 작성한 UserDetailsService 를 사용 할 수 있는지 에 대한 연결 고리를 찾기가 어렵네요. 스프링이 설정 과정에서 UserDetailsService 빈을 찾으면 어디선가 등록을 해줄 것 같긴 한데 실제 관련 코드를 볼 수 있으면 이해하는데 더 도움이 될 것 같습니다.
- 미해결스프링 시큐리티
Servlet Filter 질문이 있습니다.
안녕하세요. 선장님. 먼저 좋은 강의 제공해주셔서 감사합니다. 많은 공부 자료 및 자극을 주셔서 잘 공부하고 있습니다. Security 공부를 하면서 궁금한 점이 생겼습니다. DelegatingFilterProxy는 일반적인 서블릿 필터이고, 그 필터 구현 처리를 스프링에 빈으로 위임한다. 라고 이해 했습니다. 그러면 Servlet Filter를 Bean으로 등록하면 SpringContext에 접근 가능 하다고 이해해도 되는 걸까요 ?? Security가 한번에 와닿지는 않아서 여러번 보며 공부해야 할 것 같습니다 ㅎㅎ,,
- 미해결스프링 시큐리티
웹 기반 시큐리티에 어울리지 않는다는 뜻이 정확이 어떤 뜻인지 궁금합니다.
웹 기반 시큐리티에 어울리지 않는다는 뜻이 정확이 어떤 뜻인지 궁금합니다. 강의 25초 쯤에 하신 말씀이 궁금해서 문의 드립니다. 해당 기능 또한 나이스한 방법으로 웹 시큐리티에서 사용할수 있을것 같은데 혹시 어울리지 않는 이유가 궁금합니다~
- 미해결스프링 시큐리티
스프링 시큐리티 ignoring() "/favicon.ico" 리다이렉션 질문
안녕하세요, 스프링 시큐리티 ignoring() 1부 강의를 듣던 중, 백기선님이 구동한 웹 애플리케이션 결과와 제 결과와 달라서 질문을 드립니다. 해당 강의에서 SecurityConfig 파일의 config(WebSecurity web) 메서드를 오버라이딩해서 "/favicon.ico"와 같은 경로의 요청들을 무시하도록 설정하여 루트 요청을 하면 "/login" 요청이 더이상 필요하지 않게끔 하셨는데요, 저도 강의에서 하신대로 똑같이 설정을 하였는데도, 여전히 "/", "favicon.ico", "/login" 이렇게 3가지 요청이 수행됩니다. "/favicon.ico" 요청 응답 코드는 302이구요. 아래는 제 SecurityConfig 자바 파일입니다. 어느 부분이 달라서 그런 것 인가요? package me.whiteship.demospringsecurityform.config; import me.whiteship.demospringsecurityform.account.AccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.security.servlet.PathRequest; import org.springframework.context.annotation.Configuration; import org.springframework.security.access.AccessDecisionManager; import org.springframework.security.access.AccessDecisionVoter; import org.springframework.security.access.expression.SecurityExpressionHandler; import org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl; import org.springframework.security.access.vote.AffirmativeBased; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.WebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler; import org.springframework.security.web.access.expression.WebExpressionVoter; import java.util.Arrays; import java.util.List; import java.util.zip.DataFormatException; @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { public SecurityExpressionHandler 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"); web.ignoring().requestMatchers(PathRequest.toStaticResources().atCommonLocations()); } @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(); } }
- 미해결스프링 시큐리티
아키텍쳐 이해가 잘 되지 않는 분들 참고(질문아님)
(사진)
- 미해결스프링 시큐리티
WebSecurity 설정 관련해서 문의드립니다
안녕하세요 아래와 같이 설정을 하고 테스트를 하고 있습니다. @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .mvcMatchers("/", "/info").permitAll() .mvcMatchers("/user").hasRole("USER") .mvcMatchers("/admin").hasRole("ADMIN") .anyRequest().authenticated() .and().formLogin() .and().httpBasic(); } @Override public void configure(WebSecurity web) throws Exception { web.ignoring() .mvcMatchers( "/account/**") // fixme. 이건 왜 안되지? .requestMatchers( PathRequest.toStaticResources().atCommonLocations() ); } 이 상태에서 /account/** 가 ignore 되어 있으므로 인가 Filter 적용이 안되어야 할텐데요 http://localhost:8082/account/ADMIN/A/B 이걸 2번 연속으로 수행하게 되면 로그인 페이지로 이동하게 됩니다. 서버 콘솔은 500 에러가 나오는데... 프론트 페이지는 로그인으로 이동하는것으로 나오는데요. 혹시 이유가 무엇일까요?
- 미해결스프링 시큐리티
스프링 시큐리티 사용자 로그인 후 접속 로그(아이디, 시간) DB저장 관련문의드립니다.
안녕하세요 스프링 시큐리티에서 로그인 후 실행될 기능을 AuthenticationSuccessHandler 인터페이스를 구현한 클래스에 onAuthenticationSuccess 메소드를 오버라이드하였는데 이 메소드 안에서 사용자 아이디와, 시간을 저장하는 기능을 JPA를 사용하여 구현했습니다. 그런데 DB에 데이터가 저장이 안됩니다. 테스트로 UserDetailsService를 구현한 클래서에서 테스트 해봤는데 조회는 가능한데 저장은 실행이 안됩니다. 혹시 이부분에 대하여 도움을 받을 수 있을까요?
- 미해결스프링 시큐리티
remember-me-sample vs remember-me
안녕하세요 백기선님! SecurityConfig 에서 remember-me-sample 로 키 설정을 하셨는데요, 타임리프에서는 remember-me 로 네임을 줘도 작동이 되는 원리가 이해가 안됩니다.. 이름을 달리 해줘도 상관없는 거죠??
- 해결됨스프링 시큐리티
get 요청으로 민감한 정보를 가져오는경우
안녕하세요 기선님 항상 좋은 강의 감사합니다 !! :) Http get 요청으로 민감한 정보를 가져오는 경우에 보안을 위해 get 요청에도 csrf 토큰값을 확인하는 과정을 거치고 싶다면.. CsrfFIlter 의 코드를 추적해보니 private static final class DefaultRequiresCsrfMatcher implements RequestMatcher { private final HashSet<String> allowedMethods = new HashSet<>(Arrays.asList("GET", "HEAD", "TRACE", "OPTIONS")); @Override public boolean matches(HttpServletRequest request) { return !this.allowedMethods.contains(request.getMethod()); } @Override public String toString() { return "CsrfNotRequired " + this.allowedMethods; }} 이렇게 DefaultRequiresCsrfMatcher 를 사용해 GET, HEAD, TRACE, OPTIONS 요청인 경우에는 다른 도메인에서 온 요청에도 응답을 해주는 설정을 하는거 같고, 이 부분을 수정하면 될거같은데 시큐리티 설정 클래스에서 http.csrf().requireCsrfProtectionMatcher() 다음과 같은 방법으로 수정하면 되는게 맞을까요?
- 해결됨스프링 시큐리티
csrf 토큰
안녕하세요 기선님 좋은 강의 감사드립니다!! :) 흐름을 살펴보니 csrf필터를 거치는 요청의 경우 csrf 토큰이 없는 경우 csrf 토큰을 생성해서 요청을 반환하고, 폼요청을 보낼 때, 반환받은 csrf토큰을 같이 보내는 것 같은데, 그럼 서버쪽에서는 생성해준 csrf 토큰의 값을 어디서 보관하고 있는건가요? csrf 토큰을 포함한 요청이 왔을때 비교를 하기 위해선 반환한 토큰값을 서버측에서도 어디선가 유지하고 있어야 할텐데 그 부분이 어디일지 또 언제까지 유지하는지 궁금해서 질문남깁니다!! ======================= 질문을 남기고 구글링을 통해 찾아본 결과는 CsrfTokenRepository를 사용해서 토큰정보를 가지고 있는 것같은데 기본구현체는 HttpSessionCsrfTokenRepository를 사용하는 것으로 보아 Session을 기반으로해서 토큰 정보를 유지하고, session이 사라지면 자연스럽게 토큰 정보도 날라가는것 처럼 보이는데 맞을까요?
- 해결됨스프링 시큐리티
폼데이터가 아닌, request body로 아이디와 비밀번호를 넘길경우
안녕하세요 기선님 항상 좋은 강의 감사합니다 :) 디버거를 통해 살펴보니, 폼데이터를 가지고 필터에 의해 UsernameAuthenticationToken 생성해 강의에서 설명하신 과정을 거쳐 인증을 처리하는 것을 확인하였습니다. 그렇다면 만약 프론트단에서 JSON 형식의 request body에 아이디와 비밀번호를 넘긴다면 서버측에서는 요청본문의 데이터를 이용해 UsernameAuthenticationToken 을 생성하는 작업을 직접하는 것인지, 아니면 또 다른 방법을 사용해서 인증을 거치는 것인지 궁금해서 질문 남깁니다!
- 해결됨스프링 시큐리티
application.properties 를 통해 기본유저 정보를 변경
혹시, application.properties 를 통해 기본유저 정보를 변경하고 동작이 잘 되지 않으시는 분들은 크롬 프라이빗 모드로 캐시를 날리고 해보세요! 한 시간 가까이 해맸는데, 크롬 프라이빗 모드로 하니 제대로 동작하네요! 첫 강의에서 개발할때 해당 모드를 사용해서 하는게 편하다고 하셨는데 그 이유를 절감했네요 ...
- 스프링 시큐리티
제공되는 사용자가 적용이 안되는거 같은데 이유가 있을까요?
삭제된 글입니다
- 스프링 시큐리티
SecurityContext / Authentication
삭제된 글입니다
- 해결됨스프링 시큐리티
statefull vs stateless 질문
안녕하세요. BasicAuthenticationFilter 설명에 오류가 있는것 같아 질문 남깁니다. 확인 부탁드려요. BasicAuthenticationFilter.doFilterInternal 메소드 안에 this.rememberMeServices.loginSuccess(request, response, authResult);가 호출되는 부분이 있는데 여기에서 쿠기가 발급되는 것 같습니다. 그리고 postman을 이용해서 basic authentication을 실행한 결과 SecurityContextPersistenceFilter finally 스코프에서 session에 authentication 정보 또한 넣어 줍니다. 마지막으로 postman에서 basic authentication 후 발급 받은 쿠키만 있다면 이후 다음 요청에 authorization basic 헤더 필드가 없어도 인증된 결과를 확인할 수 있는데요. 제 생각에는 statefull과 stateless의 차이는 인증 방법(basic, form)이 아니라 http client의 차이인 것 같아요. 확인 부탁 드립니다. 감사합니다.
- 해결됨스프링 시큐리티
csrf 필터 질문
안녕하세요. 강의를 듣던 중 의문이 생겨 질문합니다. csrf 토큰을 이용해 현재 들어온 요청이 악의적인 사이트로부터 온 요청이 아닌 것을 검증한다라는 개념은 이해할 수 있었는데요. 아래 시나리오로 악의적인 form 페이지를 생성해도 csrf 필터가 악의적인 요청을 구별할 수 있는지 궁금합니다. 0. 모든 도메인에 대한 cors 요청은 열려 있다고 가정 1. 악의적인 사이트에 사용자가 접속 2. 악의적인 사이트는 실제 form 페이지를 요청 3. 실제 form 페이지에서 csrf 토큰 파싱 & 위조 form 페이지에 csrf 토큰 삽입 4. 사용자에게 위조 form 페이지 제공
- 미해결스프링 시큐리티
에러 질문
12:45초까지 따라해서 실행 했는데 밑에 오류가 뜹니다. 몇 번 다시 해봤는데도 안되네요;; org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'accountRepository': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract com.example.security.account.Account com.example.security.account.AccountRepository.finByUserName(java.lang.String)! No property finByUserName found for type Account!