수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 시큐리티
csrf 토큰 과 jwt 토큰
제가 jwt를 사용하고 싶은데 그런 경우에는 jwt를 사용하면 csrf 기능을 사용하면 안되는 건가요?
- 미해결스프링 시큐리티
remember_me는 각자의 사이트에 해당하는 것입니까?
remember_me는 각자의 사이트에 해당하는 것입니까? - 네이버 remember_me - 쿠팡 remember_me - 구글 remember_me 다 각자 다른 remember_me를 사용하고 있는 건가요 아니면 remember_me를 여러 사이트에서 재활용해서 사용하는 건가요?
- 미해결스프링 시큐리티
질문
선생님 제가 컴포지트로그아웃 핸들러까지 들어왔는데 선생님의 for 문처럼 값이 바뀌는걸 어떻게하는지 궁금합니다.
- 미해결스프링 시큐리티
선생님 단축키 질문입니다.
저도 흐름을 따라가고 싶어서 단축키를 찾아보면서하는데 프로바이더 매니저로 클래스 이동할때 메서드에 단축키 뭐입력하시는거 같은데 그 단축키가뭔가요? 브레이크포인트 다 찍어놓고 다음 브레이크 포인트로 넘어가시는건가요?
- 미해결스프링 시큐리티
pointcut사용이유
바로 전시간에 배웠던 방법과 매우 흡사하며 배우기 전까지 전시간에는패키지 이름부터 쓰는게 불편해서 그게 바뀌나 했는데 오히려 pointcut쓸때는 더 추가할 내용이 많네요. 제가 보기에는 방법도 흡사하며 기능도 비슷한거 같은데 굳이 더 추가하고 해서 이방법을 사용할 이유는 없는거같은데 혹시 이것만이 가지고 있는장점이나 실무에서도 자주 쓰이는지 여쭤봐도 될까요??
- 해결됨스프링 시큐리티
안녕하세요 선생님 질문이 있습니다
꼭 스프링 시큐리티에만 해당하는 내용은 아닌데요. 제가 아직 부족해서인지 추상체에 대한 구현체를 찾는다던지 또 흐름이 어디서부터 시작이고 끝인건지 실제로 다른 라이브러리를 쓰면서 궁금한 부분 뜯어보고 기본적으로 제공하는 구현체를 보고 아 이런식인거구나 이해하는 편입니다. 그런데 아무래도 스프링 시큐리티처럼 내용이 방대하고 많은 부분이 추상화되어 있고 구현체도 한가지가 아니라면 어떤게 사용되는 구현체인지 알아보거나 흐름의 시작이 어디인지 알 수 있을까요?? 질문이 너무 난해했다면 죄송합니다. ConcurrentSessionControlAuthenticationStrategy 클래스는 어디에 연관되어있고 하는 부분을 찾기가 어려웠습니다 ㅠㅠ
- 미해결스프링 시큐리티
FilterChainProxy에서 14개의 필터 루프돌때
FilterChainProxy에서 14개의 필터 루프돌때 디버깅을 해보면 한번에 순차적으로 쭉 안가고 왜 중간에 특정필터에서 첨부터 다시 돌게 되나요?
- 미해결스프링 시큐리티
원래 Method 방식은 권한계층이 적용되지 않는건가요 ?
Url 방식은 정삭적으로 권한계층에 맞게 manager 권한을 요청하면 manager, admin은 접근 가능하지만, user는 접근 불가하게 설정되는 반면, Method방식은 manager 권한을 요청하면 manager을 제외한 user와 admin 은 접근이 불가능합니다. 왜 이런걸까요 ?
- 미해결스프링 시큐리티
본인글 삭제 아래 질문 이어서..
안녕하세요. 댓글로 다시 질문드렸는데 못보시는것 같아서 한번 더 질문드립니다. 인증을 받은 상태라서 로그인 유저 정보를 가져오는데는 어려움이 없습니다. 그럼 작성한 게시글의 작성자 id는 어떻게 가져오는가가 문제입니다. @PreAuthorize("isAuthenticated() and (( #board.createdBy == principal.userId ) or hasRole('ROLE_ADMIN'))") @RequestMapping( value = "/{id}", method = RequestMethod.PUT) public ResponseEntity<Message> updateUser(Board board, @Pathvariable String id){ messageService.updateMessage(id); return new ResponseEntity<Message>( new Message("수정성공"), HttpStatus.OK ); } 구글링을 해보니 바디에 삭제 혹은 수정할 글의 정보를 담아서 위 코드와 같이 요청을 보내더라구요.. 그럼 의미가 없는게 아닌가 싶습니다. 해당 글쓴이의 id(pk)를 제 id와 같게 담아서 보내면 삭제할수 있는 권한만 있으면 다른 글도 삭제 혹은 수정이 되지 않는가? 라는 생각이 들더라구요.. 제가 이상하게 생각하는건가요??ㅎㅎ;;
- 미해결스프링 시큐리티
spring sercurity를 통해서 특정 행위 허용
안녕하세요. 강사님 좋은 강의해주셔서 감사합니다. 제가 시큐리티에 jwt를 사용해서 rest api 를 개발중인데요.제가 강의를 아직 덜 보았지만 DB를 통해서 권한 관리하는 방법을 사용중입니다..아래 처럼 사용중입니다. 개발중 문제가 하나 있는데 게시판 같은 글을 삭제 할때 보통 해당 url과 method까지 추가해서 권한을 부여 하고있거든요. 예를 들어 /api/posts/*, DELETE를 추가하고 권한은 ROLE_ADMIN, 과 ROLE_USER를 설정 했습니다. 그럼 해당 url의 method는 권한을 체크하여 허용하거나 불허 합니다. 다만 이 글이 작성자 혹은 관리자만 삭제 할수 있어야 하는데 매번 컨트롤러에서 유저 체크하고 권한 체크하는 코드를 넣어줘야 하는가 궁금증이 생겨 찾아보니 인터셉터에서 url과 method 를 체크하는 벙법이 있었고 아래 처럼 다른 분의 질문에 이런식으로 예시를 들어주셨더라구요. 그런데 아래 메소드의 파라미터의 user는 로그인한 user객체일텐데 제가 지우거나 수정 해야 할 글의 생정자id는 어떻게 가져와 비교를 하시는건가요? @PeAuthorize에 있는걸로는 잘 이해가 안되더라구요. rest api로 개발 하다보니 url은 /api/posts/1 과 같이 게시글 id만 보내는 상황입니다., 답변 부탁드리겠습니다. 감사합니다. // 로그인한 사용자이고 본인인 경우나 혹은 전체 관리자인 경우 수정 메서드가 실행되고 그렇지 않을 경우엔// 403 에러 발생함@PreAuthorize("isAuthenticated() and (( #user.name == principal.name ) or hasRole('ROLE_ADMIN'))")@RequestMapping( value = "", method = RequestMethod.PUT)public ResponseEntity<Message> updateUser(User user ){ messageService.updateMessage( "메시지 저장"); return new ResponseEntity<Message>( new Message("수정성공"), HttpStatus.OK );}
- 미해결스프링 시큐리티
usernamePassword
ajaxfilter를 usernamePasswordFilter 보다 앞에 위치 시키신 이유는 무엇인가요??
- 미해결스프링 시큐리티
6분20초쯤에
부모클래스의 onAuthenticationFailure를 호출한 이유가 이해가 가질 않는데..왜그런거죠..?
- 미해결스프링 시큐리티
빈 설정에 대한 질문입니다.
질문 1 SecurityConfig 파일에서 accessDeniedHandler, affirmativeBased, getAccessDecisionVoters 등 @Bean 으로 등록 하지 않은 것들과 authenticationProvider, AccessDecisionVoter, roleHierarchy 등 @Bean 으로 등록된 것들은 어떤 차이가 있나요? 혹시 @Bean 으로 등록시키는 기준이 있는지 궁금합니다. 질문 2 @Service 으로 설정된 SecurityResourceService 를 MethodResourcesMapFactoryBean 에서 @Autowired 로 주입 받지 않은 이유가 있나요??
- 미해결스프링 시큐리티
여기서 왜 401 ERROR 가 발생하는지 잘 모르겠습니다.
안녕하세요. 강의 매우 잘 듣고 있습니다. 다름이 아니라 질문이 있는데요. 시큐리티 설정은 이렇게 해주고, ajax.http 실행시켜주면 HTTP/1.1 401 X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block Cache-Control: no-cache, no-store, max-age=0, must-revalidate Pragma: no-cache Expires: 0 X-Frame-Options: DENY Content-Length: 0 Date: Sat, 05 Feb 2022 13:50:25 GMT Keep-Alive: timeout=60 Connection: keep-alive <Response body is empty> Response code: 401; Time: 4ms; Content length: 0 bytes 401 에러가 발생하는데 어디쪽을 확인하면 좋을까요..? AjaxSecurityConfig @Order(0)@Configurationpublic class AjaxSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.authenticationProvider(ajaxAuthenticationProvider()); } @Bean public AuthenticationProvider ajaxAuthenticationProvider() { return new AjaxAuthenticationProvider(); } @Bean public AuthenticationSuccessHandler ajaxAuthenticationSuccessHandler() { return new AjaxAuthenticationSuccessHandler(); } @Bean public AuthenticationFailureHandler ajaxAuthenticationFailureHandler() { return new AjaxAuthenticationFailureHandler(); } @Override protected void configure(HttpSecurity http) throws Exception { http .antMatcher("/api/**") .authorizeRequests() .antMatchers("/api/messages").hasRole("MANAGER") .anyRequest().authenticated() .and() .addFilterBefore(ajaxLoginProcessingFilter(), UsernamePasswordAuthenticationFilter.class) ; http .exceptionHandling() .authenticationEntryPoint(new AjaxLoginAuthenticationEntryPoint()) .accessDeniedHandler(ajaxAccessDeniedHandler()) ; http.csrf().disable(); } @Bean public AccessDeniedHandler ajaxAccessDeniedHandler() { return new AjaxAccessDeniedHandler(); } @Bean public AjaxLoginProcessingFilter ajaxLoginProcessingFilter() throws Exception { AjaxLoginProcessingFilter filter = new AjaxLoginProcessingFilter(); filter.setAuthenticationManager(authenticationManagerBean()); filter.setAuthenticationSuccessHandler(ajaxAuthenticationSuccessHandler()); filter.setAuthenticationFailureHandler(ajaxAuthenticationFailureHandler()); return filter; }}
- 미해결스프링 시큐리티
principal에 넣어주는 값
ajaxauthenticationprovider 에서 인증이 성공하면 accontContext.getAccount()를 담은 토큰을 반환해주는데... principal 프로퍼티에는 UserDetails 구현체가 들어가야 하는것 아닌가요?? account는 그냥 entity이고 accountContext가 User를 상속해서 UesrDetails 구현체니깐 accountContext가 들어가는게 맞는것 같다는 생각이 들어 질문드립니다. 미리 답변 감사드립니다.!
- 미해결스프링 시큐리티
redirect시에 그 다음 필터를 거치지 않는 원리가 궁금합니다.
redirect 할때는 usernameauthenticationfilter 다음 필터부터 거치지 않는 원리가 궁금합니다. 디버깅을 해보니 기존 요청과의 차이점을 잘 모르겠는데 그 다음 필터를 거치지 않는 이유를 모르겠습니다. 또한 궁금한게 requestcacheawarefilter 에서는 redirect 하는게 아니라 세션에 캐쉬된 request로 요청을 바꿔서 그 다음 필터를 호출하는것이 맞나요? 미리 답변 감사드립니다.!
- 미해결스프링 시큐리티
AjaxAuthenticationSuccessHandler 관련 질문
안녕하세요 강사님!실습을 진행하다가 오류가 생기는 부분이있어서 질문드립니다. AjaxAuthenticationSuccessHandler 부분에서 @Overridepublic void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { Account account = (Account) authentication.getPrincipal(); response.setStatus(HttpStatus.OK.value()); response.setContentType(MediaType.APPLICATION_JSON_VALUE); objectMapper.writeValue(response.getWriter(),account);} Rest방식으로 user를 호출했을 때, 302에러와 함께 Account account = (Account) ... 부분에서 타입캐스팅 관련 오류가 뜹니다. 그래서 Account 가 아닌 기존의 Object 형으로 받아서 진행하면 오류없이 잘 진행이됩니다. authentication.getPrinciple() 이 String을 반환하는 코드는 아무리 찾아봐도 없는데 String cannot be cast to... 오류가 뜨는것이 이해가 가지 않아 질문드립니다.
- 미해결스프링 시큐리티
강사님 세션과 관련해서 질문이 있습니다.
강사님 안녕하세요. 항상 좋은 강의 감사드립니다! 세션과 관련해서 인증에 성공하면 JSESSIONID를 키로해서 세션 저장소에 SecurityContext를 저장하는데 이 작업을 SessionManagementfileter에서 하는지 아니면 usernamepasswordauthenticationfilter에서 하는지 궁금합니다.!
- 미해결스프링 시큐리티
두개의 ProviderManager가 생성되는 이유
안녕하세요 강사님. 좋은 강의 정말 감사드립니다. 강의를 듣던 도중, formLogin 방식으로 설정해놓은 프로그램에 로그인 요청이 들어왔을 때 ( 초기화 시에 ) 두 개의 ProviderManager가 생성된다고 하셨습니다. 그 흐름은 우선 formLogin 방식이기 때문에 parentAuthenticationManager에 DaoAuthenticationProvider가 저장되고, 이후에 다시 자식 매니저에 AnonymousAuthenticationProvider가 저장된다는 흐름이었습니다. 1. 첫 번째로 궁금했던 점은 'formLogin 방식으로 지정되어 있는 로그인 페이지에서 왜 굳이 AnonymousAuthenticationProvider가 필요할까 ?' 입니다. 2. 1번 질문의 연장선으로 , 그렇다면 로그인되지 않은 사용자도 사용할 수 있는 페이지를 설계할 때 필요하기 때문에 이런 과정이 들어가 있는 것일까요 ?
- 해결됨스프링 시큐리티
존경하는 선생님. 개인저인 질문도 가능할까요??ㅎ;;
선생님 안녕하세요 강의 무지 잘 보고 있습니다. 주니어 개발자 이기도 하고, 웬만해서는 security 코딩할 기회가 없다보니 소문을 듣고 찾아와서 듣게 되었습니다. 요즘 선생님이 하시는 말씀이나 답변들을 보면서 대단하다고 느끼는 중, 저도 이러한 학식을 배우고 싶어 글을 남기게 되었습니다. 다름 아니라, 혹 공부하시는 방법이 따로 있을까요?? 배워야 할건 많고 영어도 못하여 한계가 느껴져서 어떠한 방식이 있을까 싶어 연락드려봤습니다.. 제가 여러 강의는 몇번 보았는데요..타 강의 선생님이 절대 낮은 수준은 아니신데 개인적으로 한단계 레벨이 더 높은거 같아서 학습방법이라던지, 혹은 제가 따라할 수 있는 방법이 없을까 해서 연락드렸습니다.. 개인적으로는 메일로 소통하고 싶지만 바쁘신거 같아 무례를 범하는거 같지만 이렇게 공개적인 게시판에 남기게 되었습니다. ps.메일 주소 주시면...감사하겠사옵니다..ㅜㅜ올 한해도 대박 나시길 바랍니다. 좋은강의 감사합니다.