수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 시큐리티
다중 필터 구현 시, antMatchers 사용
예제에서는 antMatcher('/admin/**') 이런식으로특정 url 하나만 지정을 했는데혹시 '/user/**' 도 같이 Match 시키고 싶은데antMatcher 는 1개만 처리해주는 것 같습니다.꼭 새로운 FilterChain 을 생성해서 설정해야하나요?
- 미해결스프링 시큐리티
커스텀 필터 등록 시, ApplicationFilterChain 에 등록
안녕하세요 강의 잘 듣고 있습니다! SecurityConfig에서 커스텀 필터 등록 시 @Bean 형식으로 필터객체를 생성하여 등록하면 ApplicationFilterChain에 등록되는게 맞는걸까요? Bean 만 선언한다면 ApplicationFilterChain 에 등록되고addFilter(customFilter) 를 추가해주면 ApplicationFilterChain 리스트에도 등록되고SecurityFilterChain 에도 등록이 됩니다.문제는 제가 만든 커스텀 필터는, 특정 URL 에서는 동작 안하게끔 구현하고 싶은데@Bean으로 등록했기 때문에 ApplicationFilterChain에 등록되어 어떤 요청이 들어오든 동작하는 게 문제입니다. @Bean 방식이 아닌addFilter(New CustomFilter()) 로 하면 SecurityFilterChain에만 등록되긴 하는데 CustomFilter 는 스프링 컨테이너에 등록이 안되기 때문에 다른 Resource 객체들을 주입받지 못하는 상황입니다.결론은 ApplicationFilterChain에는 추가 안하고 SecurityFilterChain에만 커스텀 필터를 추가하고 싶은데 New 방식 말고는 없는 것인지가 궁금합니다!
- 해결됨스프링 시큐리티
스프링부트3.1 / 시큐리티6.1 관련하여 문의드립니다.
http.authorizeRequests() .requestMatchers(new AntPathRequestMatcher("/")).permitAll() // 기본 경로는 로그인을 안하고도 볼 수 있어야함 .requestMatchers(new AntPathRequestMatcher("/mypage")).hasRole("USER") //유저 권한이 있는 사람만 접근 가능 .requestMatchers(new AntPathRequestMatcher("/messages")).hasRole("MANAGER") .requestMatchers(new AntPathRequestMatcher("/config")).hasRole("ADMIN") .anyRequest().authenticated() .and() .formLogin(); return http.build(); @Bean static final public InMemoryUserDetailsManager kk() { //DB연동을 안할 경우, 테스트 용으로 하는 것이다. UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("1111") .roles("USER") .build(); UserDetails admin = User.withDefaultPasswordEncoder() .username("admin") .password("1111") //.roles("ADMIN","USER") .roles("ADMIN") .build(); UserDetails manager = User.withDefaultPasswordEncoder() .username("manager") .password("1111") .roles("MANAGER") .build(); return new InMemoryUserDetailsManager(user, admin, manager); // 아래는 컨트롤러 입니다. @GetMapping("/") public String getInts() { System.out.println("path: / /n"); return "index"; } @GetMapping("/mypage") public String getInt23() { System.out.println("path: /mypage /n"); return "index"; } @GetMapping("/config") public String getInt45() { System.out.println("path: /config /n"); return "index"; } 안녕하세요 해당 config파일 설정에 의하여 프로젝트는 문제 없이 잘 돌아가고는 있습니다.하지만, 초기 경로 "/" 으로 갈때에는 모두 허용이라는 permitAll()이 작동하기 전에 무조건 시큐리티 내장 "/login" 페이지로 이동 후, 아이디/비밀번호 입력시 "/" 경로를 타게 됩니다. /login을 거치지 않도록 하기 위한 방법이 있을까요? https://drive.google.com/file/d/1DljHlHOwmlCuiFrCh5NMB5TfYhMh23Bj/view?usp=sharing해당 링크는 크롬 브라우저에서 페이지 테스트한 영상입니다!!
- 미해결스프링 시큐리티
Remember me 쿠키에 대해서
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. remember me 쿠키에 대해 질문드리려 합니다remember-me 쿠키는 사용자아이디 + 비밀번호를 암호화 해서 가지고 있는걸로 이해했습니다. 그래서 인증 토큰이 만료된다면, remember-me 쿠키를 통해서 쿠키를 디코딩하여 다시 인증을 시도하는걸로 이해했구요!그러면, 마지막에 'remember-me 쿠키를 통해서 쿠키를 디코딩하여 다시 인증을 시도' 하기 전에, 사용자가 비밀번호를 변경한다면 remember-me 는 적용이 안되고 다시 로그인 페이지로 돌아가는 걸까요?강의 잘 듣고 있습니다. 감사드립니다!
- 미해결스프링 시큐리티
SecurityConfig질문
안녕하세요 강의잘듣고 있습니다!. 해당 강의부터 엑셀에 작성해주신대로 05-01브랜치를 참고하여 강의를 진행하고 있습니다. SecurityConfig.java를 보면, ajax LOGIN방식을 DSL로 구현한게 Form방식과 합쳐져 있는데 이 설정하나로 form / ajax로그인 두 방식모두 지원하는건가요?
- 미해결스프링 시큐리티
메소드방식 인가처리와 URL 방식 인가처리를 중첩으로 설정할 경우 메소드방식 인가처리가 적용되는 이유
메소드방식 인가처리와 URL 방식 인가처리를 중첩으로 설정할 경우 메소드방식 인가처리가 적용되더라고요추측이지만 메소드방식 인가처리가 URL인가처리 이후 실행되기 때문이라고 생각이 드는데 맞을까요?
- 해결됨스프링 시큐리티
setSharedObject 메소드 질문있습니다!.
안녕하세요 강사님 강의 잘듣고 있습니다. 아래 코드가 필요한가요? 공유해야하는 이유를 잘모르겠구 주석해도 정상작동하는거 같아서 질문드립니다! 감사합니다!.http.setSharedObject(AjaxLoginProcessingFilter.class, getAuthenticationFilter());
- 미해결스프링 시큐리티
child_name,parent_name
계층권한에서 저 둘의 관계는 왜@ManyToOne로 설정 되어 있을까요 ??현재 프로젝트는 1:1로 해도 문제가 없지 않나요 ?!
- 미해결스프링 시큐리티
SecurityContext 의 clear시점이 궁금합니다.
강의를 듣다가 궁금한점이 생겨 이렇게 질문 드립니다.SecurityContextPersistenceFilter에서 클라이언트의 최종 요청이 끝나면 SecurityContext를 클리어한다고 알고 있습니다.거기서 클라이언트의 최종요청 이라는것이 SecurityContext는 세션에 저장되어 있으니 세션만료 될때까지는 존재 하는것인지 아니면 요청이다보니 하나의 컨트롤러에서 하나의 작업을 수행 후 리턴해주고 끝났을때 마다 SecurityContext 를 클리어해주고 새로운 요청이오면 다시 만드는 것인지 궁금합니다.
- 미해결스프링 시큐리티
CustomAuthenticationProvider 질문
CustomAuthenticationProvider를 작성한 이후, SecurityConfig를 등록할 때 Adapter를 쓰지 않았을 경우 어떻게 등록하는지 알고 싶습니다.Adapter를 찾아보니 deprecated되어서 사용하지 않고 filterChain을 사용했을 때 어떻게 등록해야한다 이런 정보가 없어서요.
- 미해결스프링 시큐리티
강의소스 및 필독사항 엑셀이 어디있나요?
https://github.com/onjsdnjs/corespringsecurity엑셀로 올려드린 상단의 수업자료를 다운받아 반드시 필독해 주십시오이렇게 github주소만 있는데 엑셀이 어디있는지 모르겠습니다또한 섹션3 프로젝트생성 강의를 듣는 중 resource쪽 파일은 깃에있는 파일 그대로 다운받아 사용하려 했는데 이미 완성되어있는 프로젝트라 그런지 강의에서 보이는 내용과는 다른 부분이 있는거 같네요WebSecurityConfigurerAdapter Deprecated 부분에 대한 추가 설명은 따로 없는건가요?
- 미해결스프링 시큐리티
스프링 시큐리티 6.0 이상에서 securityfilterchain의 requestMatcher
강의 2-2 필터 초기화와 다중 보안 설정을 시큐리티 6.0 버전 이상으로 따라 하던 중에 다른 결과가 나와서 질문 드립니다configuration은 위와 같이 설정하였고 처음에는 영상에서 처럼 Order(0)과 Order(1)을 지정 하여 실행하였습니다.제 생각으로는 6.0이상 버전에서는 사용할 수 없는 antMacher대신 requestMatchers를 사용하여 requestMatcher가 1번첫번째 필터체인은 "admin/**" 두번 째 체인은 any request가 될 것이라고 생각했지만 디버깅 해보니 둘 다 any request가 나와 루트로 접속했을 때 첫번째 필터체인이 생성되어 루트로 가는 것이 아닌 basic login form이 나왔습니다.그래서 디버깅 중 위와 같이 뜨는 것이 보여 애초에 등록이 잘못 된 건가 싶기도 했는데 영상에서처럼 filters를 확인해보면 첫번 째는 httpbasic와 같이 등록된 12개의 필터, 두번 째는 formlogin과 같이 등록된 14개의 필터로 각각 알맞게 등록되어 있었습니다.어째서 두 개 모두 다 위 필터들은 정상적으로 등록이 되었는데 requestMatcher는 둘 다 any request 인걸까요? 6.0 이후 버전에서는 requestMatcher를 바꾸려면 다른 방법을 써야 하는 것일까요? 도움 주시면 감사하겠습니다 ㅠㅠ
- 해결됨스프링 시큐리티
logout을 했지만 세션이 남아있습니다.
http .authorizeRequests() .antMatchers("/user").hasRole("USER") .antMatchers("/admin").hasRole("ADMIN") .antMatchers("/admin/**").access("hasRole('ADMIN') or hasRole('SYS')") .antMatchers("/admin/**").hasAnyRole("ADMIN","SYS") .anyRequest() .authenticated(); http .formLogin(); http .sessionManagement() .maximumSessions(1) .maxSessionsPreventsLogin(true); http .logout() .logoutUrl("/logout");위 내용과 같이 설정 후 user 계정으로 [로그인 -> 로그아웃] 후로그인 시도시 아래와 같은 화면이 표시됩니다.디버깅 해보니 logout 후에도 기존 세션이 있어 기존 살아있고, 해당 세션과 세션아이디가 다르니 초과 오류를 반환하는 것으로 확인이 됩니다.Logout 후에도 세션이 남아있는 이유와 해결방법이 있을까요?
- 미해결스프링 시큐리티
섹션 3-5의 CustomAuthenticationProvider 오류에 대해
강의 소스 그대로 참고하여 현재 진행중인 프로젝트에CustomUserDetailsService, CustomAuthenticaionProvider, SecurityConfigure 모두 작성하였습니다.그런데 CustomAuthenticaionProvider의 UserDetailsService와 PasswordEncoder의 @Autowired 부분에서 빨간 줄이 그어져 진행이 불가능합니다. 혹시 스프링 부트 버전차이 때문에 그러는 걸까요?? 현재 2.7.1 사용중입니다.실습한 코드 사진 첨부하도록 하겠습니다.configurecontextcustomUserDetailsServicecustomAuthenticationProvider
- 미해결스프링 시큐리티
예외처리 동작과정
안녕하세요 강의 디버깅중에저희가 본 내용은 여기입니다. 그런데 위에 보시면 169라인 exception instanceof AuthenticationException 인증예외도 잡더라구요. 그런데 저부분은 현재 강의에선 이용하지않고 지금 강의는 AuthenticationFailureHandler 를 별도로 상속받아 클래스를 만들어 처리하고 있다고 생각하면 될까요 ?
- 미해결스프링 시큐리티
강의 내용 질문
안녕하세요 강의 너무 최고입니다.질문이 있습니다. !! 첫번째 질문은http.exceptionHandling().authenticationEntryPoint(new AjaxLoginAuthenticationEntryPoint()).accessDeniedHandler(ajaxAccessDeniedHandler());설정하실때 전자는 생성자를 만들고두번째는 왜 같은 방법으로 생성자를 만들지않고 등록을 하는건가요 ?-> .accessDeniedHandler(ajaxAccessDeniedHandler());이걸.accessDeniedHandler(new AjaxAccessDeniedHandler());이렇게 안하시는 이유가 있나요 ? 두번째 질문은 SecurityConfig 에서@Beanpublic AccessDeniedHandler accessDeniedHandler() {CustomAccessDeniedHandler accessDeniedHandler = new CustomAccessDeniedHandler();accessDeniedHandler.setErrorPage("/denied");return accessDeniedHandler;}이 등록되어있는데.exceptionHandling().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login")).accessDeniedPage("/denied").accessDeniedHandler(accessDeniedHandler());이 두줄을 추가 하셨습니다. 우선적으로 여기서 첫번째 질문은.accessDeniedPage("/denied")랑accessDeniedHandler.setErrorPage("/denied");이게 같은 역할을 하는것이 아닌가요 ? 그리고 마지막으로.authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login"))이 내용은 CustomAuthenticationFailureHandler 에 설정된setDefaultFailureUrl("/login?error=true&exception=" +errorMessage);super.onAuthenticationFailure(request,response, exception);이게 이미 처리하고 있던 내용 아닌가요 ? 마지막 질문은 .authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login")) 이건인가 예외로 생각하고 CustomAuthenticationFailureHandler 에 설정된 내용은 인증 내용이라고 생각하면 될까요 ?
- 해결됨스프링 시큐리티
경로설정
protected AjaxLoginProcessingFilter(String defaultFilterProcessesUrl) {super(new AntPathRequestMatcher("/xxx"));}이렇게 설정하는건 자바에서 직접 설정하는거고이전에 설정파일에서http.authorizeRequests().antMatchers("/xxx") 경로 설정한거랑두개다 같다고 생각하면 되는거죠 ?
- 미해결스프링 시큐리티
인증 거부 처리 강의 중 질문
인증 거부 처리 -8:42 ) LoginController 에서 Account account = (Account) authentication.getPrincipal();이 가능 한 이유가 저희가 인증 객체를CustomAuthenticationProvider코드에서 UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(accountContext.getAccount(), null, accountContext.getAuthorities()); 로 토큰을 만들어서 스프링이 내부적으로 SecurityContext 안에 accountContext.getAccount(); (인증객체) 을 저장했기 때문에 가능하다고 이해했는데 맞나요 ?
- 미해결스프링 시큐리티
CustomAuthenticationProvider 추가
안녕하세요기존에는 CustomUserDetailsService 로 인증처리를 완료했는데 이때 AuthenticationProvider의 anthenticate 메서드 역할은 우리가 만든 loadUserByUsername + 스프링 시큐리티가 기본으로 제공하는 역할을 이용하였고 이번에 새로 추가한 CustomAuthenticationProvider 는AuthenticationProvider의 anthenticate 역할을 커스터마이징 했다고 생각하면 되는걸까요 ?
- 해결됨스프링 시큐리티
스프링부트 버전 2.7이상 authenticationManagerBean 등록방법을 잘 모르겠습니다.
안녕하세요 선생님 일단 좋은 강의 감사합니다.선생님 강의를 들으면서 2.7버전으로 진행하고 있는데매니저 를 등록할때부터 막혔습니다. 제 나름대로 소스도 좀 제가 평소에 하던 방식으로 하고있었는데 강의 버전이랑 맞지 않으니 힘드네요 ㅠ 이 부분은 스프링부트 2.7이상에서는 어떻게 하면될까요? 깃허브 주소 : https://github.com/PeachCoolPiece/corespringsecurity 입니다.