묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
주입받는 authenticationManagerBuilder 질문
HttpSecurity에서 가져올 수 있는 AuthenticationManagerBuilder와주입받는 AuthenticationManagerBuilder가 사로 다른건가요?AuthenticationManagerBuilder가 자동 초기화과정에서 빈으로 생성되고 이게 싱글톤 빈이 아닌건가ㅛ..?
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
UsernamePasswordAuthenticationFilter 존재 여부
CustoamAuthenticationFilter를 UsernamePasswordAuthenticationFilter앞에 추가하셨는데,formLogin api를 설정하지 않아도 UsernamePasswordAuthenticationFilter가 존재하는 건가요..?
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
namespace 칸이 없습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.가장 egov 4.2버전으로 처음부터 다시 하고있는데namespace 항목이 없습니다.어노테이션에러 해결어떻게 해야할까요..현재 pom.xml에 아래 디펜던시 추가해봣는데도 안됩니다
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
postman에서 rest login role 테스트 하는 방법?
rest api 비동기 로그인을 프로젝트를 따라하며 공부하고 있는데요, postman에서 로그인된 회원에 대한 api를 테스트하고 싶은데 로그인 정보?를 어디에 넣어 줘야 테스트가 가능할까요?
-
미해결스프링부트 시큐리티 & JWT 강의
[자바] 시큐리티 Config 참고
@Configuration @EnableWebSecurity // 스프링 시큐리티 필터가 스프링 필터체인에 등록 public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf(AbstractHttpConfigurer::disable) .authorizeHttpRequests(authorize -> authorize .requestMatchers("/user/**").authenticated() // /user라는 url로 들어오면 인증이 필요하다. .requestMatchers("/manager/**").hasAnyRole("MANAGER", "ADMIN") // manager으로 들어오는 MANAGER 인증 또는 ADMIN인증이 필요하다는 뜻이다. .requestMatchers("/admin/**").hasRole("ADMIN") // //admin으로 들어오면 ADMIN권한이 있는 사람만 들어올 수 있음 .anyRequest().permitAll() // 그리고 나머지 url은 전부 권한을 허용해준다. ); http.formLogin(form -> form .loginPage("/login")); return http.build(); } }현재 버전 업데이트가 되면서 많이 바꿔어서 참고할 분들은 참고 해주시면 될꺼 같습니다!
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
WebSecurity관해여 질문드립니다
강의자료 pdf 19page 설명하실 때 WebSecurity는 HttpSecurity에서 생성한 SecurityFilterChain을 SecurityBuilder에 저장한다고 하셨는데, SecurityBuilder는 인터페이스인데 어떻게 저장하는지 이해가 안됩니다. 원래 변수나 데이터들은 객체에 저장하는게 아닌가요?
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
컨트롤러에서 그냥 Authentication을 파라미터로 받아요면 null인 이유
컨트롤러가 실행되는 시점이면 이미 모든 Filter를 거쳤으니 AnonymousAuthenticationFilter도 거쳤을거라 생각하고, SecurityContext에도 AnonymousAthenticationToken이 있으니,Authentication에 AnonymousAthenticationToken이 있을거라 생각했는데, 왜 null이 있는건가요??그리고 왜 @CurrentSecurityContext로 찾을때만 AnonymousAthenticationToken를 받을수 있는건가요??
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
회원 권한이 있어도 deinied로 가는데 이유가 뭘까요? ㅠㅠ
package io.security.springsecuritymaster.security.config; import io.security.springsecuritymaster.security.filter.RestAuthenticationFilter; import io.security.springsecuritymaster.security.handler.FormAuthenticationSuccessHandler; import io.security.springsecuritymaster.security.handler.FromAuthenticationFailureHandler; import io.security.springsecuritymaster.security.handler.FromAccessDeniedHandler; import io.security.springsecuritymaster.security.handler.RestAuthenticationFailureHandler; import io.security.springsecuritymaster.security.handler.RestAuthenticationSuccessHandler; import io.security.springsecuritymaster.security.provider.RestAuthenticationProvider; import io.security.springsecuritymaster.security.token.RestAuthenticationToken; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; import org.springframework.security.authentication.AuthenticationDetailsSource; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.AuthenticationProvider; 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.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.factory.PasswordEncoderFactories; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.AuthenticationFailureHandler; import org.springframework.security.web.authentication.AuthenticationSuccessHandler; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.security.web.authentication.WebAuthenticationDetails; @EnableWebSecurity @Configuration @RequiredArgsConstructor public class SecurityConfig { // private final UserDetailsService userDetailsService; private final AuthenticationProvider authenticationProvider; private final RestAuthenticationProvider restAuthenticationProvider; private final FormAuthenticationSuccessHandler formAuthenticationSuccessHandler; private final FromAuthenticationFailureHandler fromAuthenticationFailureHandler; private final RestAuthenticationSuccessHandler restAuthenticationSuccessHandler; private final RestAuthenticationFailureHandler restAuthenticationFailureHandler; private final AuthenticationDetailsSource<HttpServletRequest, WebAuthenticationDetails> authenticationDetailsSource; @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth .requestMatchers("/css/**", "/images/**", "/js/**", "/favicon.*", "/*/icon-*").permitAll() // 정적 자원 설정 .requestMatchers("/", "/signup", "/login*").permitAll() .requestMatchers("/user").hasAuthority("ROLE_USER") .requestMatchers("/manager").hasAuthority("ROLE_MANAGER") .requestMatchers("/admin").hasAuthority("ROLE_ADMIN") .anyRequest().authenticated() ) .formLogin(form -> form .loginPage("/login").permitAll() .authenticationDetailsSource(authenticationDetailsSource) .successHandler(formAuthenticationSuccessHandler) .failureHandler(fromAuthenticationFailureHandler) ) // .userDetailsService(userDetailsService) .authenticationProvider(authenticationProvider) .exceptionHandling(exception -> exception.accessDeniedHandler(new FromAccessDeniedHandler("/denied"))) ; return http.build(); } @Bean @Order(1) public SecurityFilterChain restSecurityFilterChain(HttpSecurity http) throws Exception { AuthenticationManagerBuilder authenticationManagerBuilder = http.getSharedObject(AuthenticationManagerBuilder.class); authenticationManagerBuilder.authenticationProvider(restAuthenticationProvider); AuthenticationManager authenticationManager = authenticationManagerBuilder .build(); http .securityMatcher("/api/login") .authorizeHttpRequests(auth -> auth .requestMatchers("/css/**", "/images/**", "/js/**", "/favicon.*", "/*/icon-*").permitAll() // 정적 자원 설정 .anyRequest().permitAll() ) .csrf(AbstractHttpConfigurer::disable) .addFilterBefore(restAuthenticationFilter(http, authenticationManager), UsernamePasswordAuthenticationFilter.class) .authenticationManager(authenticationManager) ; return http.build(); } private RestAuthenticationFilter restAuthenticationFilter(HttpSecurity http, AuthenticationManager authenticationManager) { RestAuthenticationFilter restAuthenticationFilter = new RestAuthenticationFilter(http); restAuthenticationFilter.setAuthenticationManager(authenticationManager); restAuthenticationFilter.setAuthenticationSuccessHandler(restAuthenticationSuccessHandler); restAuthenticationFilter.setAuthenticationFailureHandler(restAuthenticationFailureHandler); return restAuthenticationFilter; } // @Bean // public UserDetailsService userDetailsService() { // UserDetails user = User.withUsername("user").password("{noop}1111").roles("USER").build(); // return new InMemoryUserDetailsManager(user); // } }
-
미해결스프링부트 시큐리티 & JWT 강의
이론강의
안녕하세요OAuth이론강의는 어디에있는지알수잇을까요?
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
AuthenticatedAuthorizationManager 흐름도 질문
RequestMatcher가 Request와 매칭되는지 확인결과가 Y라면, entry를 호출해 authorizationManager를 통해 인가 체크.결과가 N이라면, 다음 RequestMatcherEntry의 RequestMatcher를 살펴보는 거 아닌가요?흐름도에는 N인데 바로 AccessDeniedException이 터진다고 되어있는데..
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
프로젝트 생성시 Srping MVC Project 없음
구글링해서 설치하려고 해도 안 되네요. 아래 분들 질문 참고해서 설치하려고 해봐도 안 되는데 자세하게 답변 좀 부탁드립니다 ㅠㅠ
-
해결됨스프링 시큐리티 완전 정복 [6.x 개정판]
섹션2 인증프로세스 마지막 강의 SavedRequest 질문있습니다
강의 잘 듣고있습니다. 궁금한 점은 다음과 같습니다.로그인 성공 시, onAuthenticationSuccess 내부에서파라미터 continue를 사용하지 않고 , 다음과 같이 /home 으로 이동하도록 하였습니다.response.sendRedirect("/home")그리고 /home 요청을 처리할 때,RequestCacheAwareFilter 에서 SavedRequest 를 사용하지 않고 현재 request를 다음 필터로 넘기는 것을 보았고, 어차피 로그인이 성공되었으니, 정상적으로 /home 으로 가는 것도 확인하였습니다.SavedRequest 를 사용하면 성능상 이점이 있다고 하셨지만, 어떤 부분에서 이점이 있는지 모르겠습니다.SavedRequest 나 현재 request 는 같을텐데, 어떻게 이점이 있는지 궁금합니다 .감사합니다.
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
공격자의 세션을 피해자가 사용하는 부분이 이해가 안 됩니다
같은 질문아 밑에 있긴한데 답변이 이해가 안가서 다시 질문을 올립니다.공격자가 서버로부터 세션 쿠키를 얻었다는 건 공격자가 로그인을 했다는 거 아닌가요?이 세션 쿠키를 다른 피해자에게 강제로 사용하도록 하는 걸 세션 고정 공격이라고 하는 것 맞나요?이게 맞다면 피해자의 활동을 서버에서는 공격자의 활동으로 인식하게 되는거고, 피해자는이미 공격자의 세션쿠키를 갖고 있으니까 별다른 인증이 필요 없은 것 아닌가요?피해다가 또 로그인을 한다는 부분이 잘 이해가 안 됩니다.아니면, 피해자가 공격자의 세션 쿠키를 들고있음에도 로그인 페이지로 접속하여 로그인을 하게됐을 때, 서버에서 새로운 세션을 생성해서 세션쿠키를 내려주지 않는다면, 공격자도 같은 세션쿠키를 사용해서 사용자 정보 페이지등에 접근이 가능하게 되는 위험을 말한다고 생각하면 될까요?
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
RequestMatcherDelegatingAuthorizationManager 로 인가 설정 응용하기에서 질문이 있습니
안녕하세요. 선생님 SpringConfig에서 어떤 요청이든 인정 허용하려고 ".anyRequest().authenticated())"로 설정하셨는데 해당 강의에서는 ".anyRequest().access(authorizationManager(null)))"으로 해주셨는데 혹시 이유가 있을까요?CustomRequestMatcherDelegatingAuthorizationManager에서 introspector에 대한 return 값이 맞는 게 없어서 강제적으로 null로 처리하신건가요?아니면 모든 요청을 인정 허용하니 introspector을 null로 해서 authorizationManager에 대한 모든 값 (null 포함)해서 허용한다는 의미인가요?바쁘시겠지만 확인 부탁드립니다~
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
csrf Post 요청 시 에러
안녕하세요.csrf.http 파일로 /csrf post 방식에 헤더에 값을 넣어서 테스트 중인데요.강사님이 말씀해주신 방법으로 해도 테스트가 진행이 안되서 질문드립니다.login 페이지에 생성된 토큰 값을 요청 시에 같이 전달했는데 왜작동이 되지 않을까요??### GET request with a header GET http://localhost:8080 Content-Type: application/json ### POST request with a header POST http://localhost:8080/csrf Content-Type: application/json ### POST request with a header POST http://localhost:8080/csrf Content-Type: application/x-www-form-urlencoded _csrf = GQUnQECQsPrRDBd53iPaRAYfoKozqh0dZfg91MeDiOKw3OOtKjUQcHb00578aiNN6A7ufTEpjZMAyXswV85b4KSyutqB7IeY ### Send GET request with json body GET http://localhost:8080/csrfToken Content-Type: application/json위는 csrf.http 파일입니다.강사님은 요청이 성공적으로 되는데 저는 똑같이 로그인 페이지가 계속 나오더라구요..
-
해결됨스프링 시큐리티 완전 정복 [6.x 개정판]
SecurityContextRepository / SecurityContextHolderFilter - 2 강의 질문 있습니다
13분 40초에 세션에서 Context 객체가 있는지 확인하고세션에 없어서 request 를 확인한다고 하셨는데, request 확인하는 부분을 건너뛰고 바로 AnonymousAuthenticationToken 을 만드는 부분으로 넘어가셨네요인증이 없는 상태에서 요청하면 SecurityContext를 찾을 때, reuqest는 확인하지 않고 세션만 확인하는걸까요 ?
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
namespace
혹시 namespace가 안보이면 해결방법이 있을까요?? 업데이트를 해도 안되고 sts 를 깔아보려고 해도 계속 오류가 나오네요
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
SecurityMockContext 로부터 유저 정보를 가져오기
@Test @DisplayName("글 삭제") @CustomMockUser void test7() throws Exception { // given UserPrincipal principal = (UserPrincipal) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); Member byId = memberRepository.findById(principal.getUserId()).orElseThrow(UserNotFound::new); Post post = Post.builder() .title("Hello World") .content("Hello Java") .member(byId) .build(); postRepository.save(post); // expected mockMvc.perform(delete("/posts/{postId}", post.getId())) .andExpect(status().isOk()) .andDo(print()); }
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
spring security 이후 Spring MVC06
80강 이후 업데이트나 사진 등록 부분이랑 업데이트하는 부분의 강의는 없는 거 같아서요 그냥 내용 들은 거랑 깃허브 비교해서 코드수정하면 되나요??
-
미해결[초급] 찍어먹자! 코틀린과 Spring Security + JWT로 회원가입 만들기
class 와 data class
안녕하세요 강의 잘 듣고있습니다.class 에는 setter 와 getter 를 생성하지 않고data class 에는 var 로 받을경우 setter 와 getter 가 생성되면 이외의 다른 메서들도 자동으로 생성이 된다고 하셨습니다.그러면 class 는 더이상 사용하지 않나요 ?