묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
인증요청시 문의드립니다.
강의진행중 궁금한게 있어서 문의드렸습니다!강의중에 토큰이 탈취될수도 있다고하셔서 String jws = Jwts.builder() .setSubject(String.valueOf(userId)) .signWith(key) .setIssuedAt(new Date()) .compact();코드를 넣어주셨습니다. 매번 다른 accessToken값이 나올수 있도록이요! 그 결과 로그인 시마다 매번 다른 토큰값이 나오는데, 로그인을 하고나서 기존의 토큰값으로 /foo 메소드를 호출하여도 인증이 되는데 왜 그런걸까요??1. 로그인시 abc토큰이 나와서 abc토큰으로 /foo 컨트롤러를 호출함 인증됨2. 또 한번 로그인시 abcd토큰이 나옴. 그런데 이전 로그인 토큰이였떤 abc토큰으로 /foo 컨트롤러를 호출하여도 인증 성공됨.왜 그런지 궁금합니다!
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
시즌3 예정에 열렬한 환호를 보냅니다.
시즌3 예정에 열렬한 환호를 보냅니다.
-
미해결스프링 시큐리티
루트에서 로그인 성공후 에러 메시지가 보입니다.
7) 로그아웃 및 인증에 따른 화면 보안 처리 강의 입니다. http://localhost:8080URL 이 위와 같은 상태에서 로그인 페이지로 이동해서 로그인을 하면 아래와 같은 메시지가 나타납니다.http://localhost:8080/mypage 경로 상태에서 로그인 페이지로 이동해서 로그인하면 정상적으로 오류 메시지 없이 잘 되는데 서브 경로가 없는 상태에서 로그인을 하니까 문제가 있어요세션에는 등록이 되고 로그인처리는 되었는데 마지막화면에서 오류메시지만 떠요.답변 부탁드릴게요 로그인 이후 URL : http://localhost:8080/error{"timestamp":"2023-03-10T01:58:06.693+00:00","status":999,"error":"None","message":"No message available"}
-
미해결스프링 시큐리티
SecurityConfig.java 에서 AuthenticationManager 부분에 대한 질문입니다.
실전 프로젝트 보고 있습니다.DB 연동 인증 처리(2) : CustomAuthenticationProvider 학습 중인데요.스프링 버전이 2.7x 이라서 SecurityConfig.java 설정이 맞지를 않네요. 검색하니깐 아래 코드 처럼 설정하면 된다고 하던데 근데 아래 코드, authenticationManager 메서드 부분이 없어도 CustomAuthenticationProvider 클래스에 @Component 어노테이션 넣으니깐 사용되더라구요... 로그인도 잘되구요.CustomUserDetailsService 클래스도 마찬가지인데, 아래 authenticationManager 메서드가 없어도 되는건지 궁금합니다.혹시 나중에 문제가 생기지 않을까 불안하기도 하네요.답변 부탁드리겠습니다.~ @Beanpublic AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {ProviderManager authenticationManager = (ProviderManager) authenticationConfiguration.getAuthenticationManager();authenticationManager.getProviders().add(customAuthenticationProvider());return authenticationManager;}
-
미해결스프링 시큐리티
csrf 토큰 질문드립니다
13강에서 한가지 여쭤볼게있어서 문의드립니다. csrf토큰값이 임의의 UUID형태의 문자열인데강의에서 헤더에 직접 추가하여 서버에 재요청하여통과하는것을 보여주셨는데요 재요청할때에는 이전 요청에서 디버깅으로 확인한 토큰을 이용하여재요청을 하였는데요.따라서, 토큰의 값이 안바뀌엇다고 생각이드는데왜 안바뀐거죠? 이부분에 대해서 문의드립니다!
-
미해결스프링 시큐리티
쿠키의 단점을 보완한 세션
쿠키 값을 변조 가능, → 예상 불가능한 복잡한 세션Id를 사용한다.-> 그런데 세션도 변조가능한거아닌가요? 그냥 더 예상이 불가능하다는건가요? 쿠키값도 랜덤값을 사용한다고 알고있어서요... 쿠키에 보관하는 정보는 클라이언트 해킹시 털릴 가능성이 있다. → 세션Id가 털려도 여기에는 중요한 정보가 없다.-> 쿠키에 보관하는 정보는 보통 그럼 중요한 정보를 보관하는건가요..? 왜 중요한 정보를 보관하는거죠 털릴수도있는데..
-
미해결스프링 시큐리티
쿠키가 세션보다 보안에 취약한 이유가 뭔가요?
쿠키가 세션보다 보안에 취약한 이유가 잘 이해가 가지 않습니다1. 쿠키가 세션보다 더 털릴 가능성이 높아서인가요?근데 세션도 결국 쿠키의 형태로 로컬에 저장되잖아요!2. 그리고 chatgpt에게 물어보니 쿠키는 클라가 변경할 수 있는데 세션은 변경을 못한다고 합니다. 세션이더라도 다른사람의 세션id값을 탈취할 수만있다면 헤더값만 변경하면 클라가 변경할 수 있게 되는거잖아요.그래서 챗지피티가 한말이 이해가 잘안가네요.
-
미해결스프링 시큐리티
결과값이 다르게 나와요
디버그 돌릴때 AjaxAuthentication.authenticate() 메소드를 찍어놔서 AjaxAuthentication를 거쳐서 동작하는거 확인했습니다db에 {username:user,password:1111}가 없는 상태에서 진행하면 loadByUsername()에서 account=null이라 UsernameNotFoundException이 발생하는데 강사님 영상에서는 해당 exception없이 진행되는걸로보아 db에 해당 유저가 미리 저장되어있다고 짐작, 프로젝트 실행 후 회원가입으로 해당 유저를 만든후 ajax.http를 실행했습니다. 그리고 이 밑이 그 결과입니다. response code 200으로 http://localhost:8080/의 response body 부분이 출력됩니다. 그런데 강사님 영상에서는 UsernameNoFoundExcpeion이 발생하지도 않고 잘 동작했으면서 저와 다르게 response body도 없고 302가 나옵니다.제가 코드 입력을 잘못한건가요?http://localhost:8080/api/login Redirections: -> http://localhost:8080/ HTTP/1.1 200 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-Type: text/html;charset=UTF-8 Content-Language: ko-KR Transfer-Encoding: chunked Date: Mon, 06 Mar 2023 10:00:46 GMT <!DOCTYPE html> <html lang="ko"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>Home</title> <script src="/js/jquery-2.1.3.min.js"></script> <link rel="stylesheet" href="/css/base.css"/> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"/> </head> <body> <div> <nav class="navbar navbar-dark sticky-top bg-dark "> <div class="container"> <a class="text-light" href="#"><h4>Core Spring Security</h4></a> <ul class="nav justify-content-end"> <li class="nav-item"><a class="nav-link text-light" href="/logout">로그아웃</a></li> <li class="nav-item"><a class="nav-link text-light" href="/">HOME</a></li> </ul> </div> </nav> </div> <div class="container"> <div class="row align-items-start"> <nav class="col-md-2 d-none d-md-block bg-light sidebar"> <div class="sidebar-sticky"> <ul class="nav flex-column"> <li class="nav-item"> <div style="padding-top:10px;" class="nav flex-column nav-pills" aria-orientation="vertical"> <a href="/" style="margin:5px;" class="nav-link active">대시보드</a> <a href="/mypage" style="margin:5px;" class="nav-link text-primary">마이페이지</a> <a href="/messages" style="margin:5px;" class="nav-link text-primary">메시지</a> <a href="/config" style="margin:5px;" class="nav-link text-primary">환경설정</a> </div> </li> </ul> </div> </nav> <div style="padding-top:50px;" class="col"> <div class="container text-center"> <h1 class="text-primary">DASHBOARD</h1> <div class="security"></div> <h1>Core Spring Security 에 오신 것을 환영합니다.</h1> </div> </div> </div> </div> <div> <footer class="page-footer font-small blue"> <div class="footer-copyright text-center py-3 border-top"> <p class="text-primary">Copyright 2020 Core Spring Security. All Right Reserved</p> </div> </footer> </div> </body> </html> Response file saved. > 2023-03-06T190046.200.html Response code: 200; Time: 152ms; Content length: 2368 bytes
-
미해결스프링 시큐리티
denied 컨트롤러에서만 인증객체 조회가 안되는 에러
https://www.inflearn.com/questions/800939/%EA%B8%B0%EB%B3%B8-daoauthenticationprovider%EC%82%AC%EC%9A%A9%EC%8B%9C-%EC%9D%B8%EC%A6%9D%EA%B0%9D%EC%B2%B4-%EC%A1%B0%ED%9A%8C-%EC%97%90%EB%9F%AC해당 질문 했던 수강생입니다.혹시 답글 확인 가능하실까요.?
-
미해결스프링 시큐리티
loginProcessingUrl 절대경로 상대경로 차이점
3) Form Login 인증 강의처럼 코드 작성하였는데 로그인이 안되고 계속 /login 페이지로 이동해서 코드를 자세히 보니 경로 설정이 잘못되었더군요..loginProcessingUrl("/login_proc") 위 코드로 정상적으로 로그인이 되는데 경로를 슬래쉬를 붙이지 않고 'login_proc' 으로만 넣어주니까 로그인 먹통이었습니다.혹시 어떤 이유에서 그런지 문의드려도 될까요?아래처럼 태그를 보면 어차피 루트에서 이동하는건데 슬래쉬가 있고 없고의 차이점이 궁금하네요.감사합니다.<form class="form-signin" method="post" action="login_proc">
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
Loading descript for 문제
안녕하세요! 나프에 이어 스프 강의까지 열심히 따라 가고 있는 학생입니다.강의 따라 열심히 실습하고 있는데요, API 설치 이후 위와 같은 팝업이 계속 뜨고 있습니다. 혼자 해결해보려고 구글 검색해봤지만, 뭐가 문제인지 모르겠습니다. ㅠ서버도 잘 작동되서 화면도 띄어지고 콘솔창에도 아무 문제가 나오지 않는데, 어떻게 해결하면 좋을까요?
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
60강 테스트가 왜 안되는지 모르겠습니다.
import 다 맞추고 mysql도 다 맞추고 했는데 hikari에서 env가 연동이 안되어서 에러가 뜨네요 왜 그런지 이해가 안됩니다. 벌써 몇일째 60강에서 넘어가지지가 않네요 도와주세요
-
해결됨스프링 시큐리티
csrf 토큰 시큐리티 6버전 변경사항
안녕하세요 강의 잘 보고있습니다. csrf 토큰 값을 헤더에 넣어서 실습하는 부분 따라해봤는데 잘 안되서 코드를 뜯어봤습니다.이번에 시큐리티 버전이 6으로 올라가면서 csrf 토큰을 인코딩해서 전달하고 이걸 디코딩하는 부분이 영상과 다른것같았습니다. 그래서 기본으로 제공하는 로그인 페이지에서 디버깅을 해보았는데 클라이언트에 전달한 csrf 토큰값이랑 실제 서버가 가지는 csrf 토큰값이 서로 달랐습니다. 이렇게되면 영상에서 보여주신 실습은 제대로 동작하지 않는게 맞나요?해당 사진은 CsrfFilter에서 actualToken을 받아오기 위한XorCsrfTokenRequestAttributeHandler 클래스 내부에 존재하는 resolveCsrfTokenValue 함수의 소스코드입니다.예제 따라하면 항상 마지막에 사이즈 비교하는 부분에서 걸렸습니다.
-
미해결스프링 시큐리티
강의 자료랑 소스 코드를 받을 수 있나요?
강의 자료는 밑에 어떤분이 올리시긴 했는데.. 답변을 "강좌소개 > 프로젝트 생성 및 의존성추가 챕터" 라고 하셨는데.. 아무리 찾아봐도 어디서 찾아야 하는지 모르겠네요.다시 자세히 좀 알려주세요.그리고 소스 코드를 받을 수 있는지요? 강의 보면서 치려고 하니까 시간 무지 걸리네요.컴파일도 잘 안되고..
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
PostCreate 기본생성자 없이 테스트 통과에 대하여
작성글 저장2 - 클래스 분리에서 PostCreate 테스트 시 기본생성자 없이 테스트 통과가 어떻게 되는지 궁금합니다.커뮤니티에서 저처럼 이 부분에 대해 궁금증이 생겨 질문한 글을 보았습니다.호돌맨님이 그 글에서 링크 건 동욱님 글도 보고 여러 가지 찾아봤는데요.제 나름대로 결론을 지은 것을 말씀드리면기본 생성자가 없을 때는 ObjectMapper가 인스턴스를 생성해 직렬화를 진행할 때 인자와 멤버 변수 간의 관계를 몰라서 그런게 아닐까 생각이 됩니다그리고 호돌맨님의 답변 중 기본 생성자 없이 title, content에 내용을 넣으려면 어떻게 해야하는지에 대해서 고민해봐야 된다고 하셨는데요저는 일단 아래와 같은 방법을 사용해서 테스트를 통과했습니다.@ToString @Getter public class PostCreate { @NotBlank(message = "제목은 필수입니다!") public String title; @NotBlank(message = "내용은 필수입니다!") public String content; @Builder @JsonCreator public PostCreate(@JsonProperty("title") String title, @JsonProperty("content") String content) { this.title = title; this.content = content; } } 혹시 제가 한 방법말고 기본생성자 없이 내용을 넣는 방법을 찾으셨는지? 궁금하고어떻게 호돌맨님은 기본생성자 없이 테스트가 통과 됐는지.. 궁금합니다...
-
해결됨스프링 프레임워크는 내 손에 [스프1탄]
06.개발환경 구축_Git연결하기 Maven 5.0.2 RELEASE 오류
버전 변경하면 콘솔창에서 에러 메세지가 등장합니다. Maven DEpendencies 안에는 5.0.2 모두 버전이 변경된 것은 확인할 수 있는데 오류가 난 상태로 실습을 진행해도 될 지 궁금합니다. [오류 메세지]
-
미해결스프링부트 시큐리티 & JWT 강의
강사님 질문이있습니다 ㅠㅠ
public class MyCustomDsl extends AbstractHttpConfigurer<MyCustomDsl, HttpSecurity> { @Override public void configure(HttpSecurity http) throws Exception { System.out.println("체크포인트!@@!@!@!@"); AuthenticationManager authenticationManager = http.getSharedObject(AuthenticationManager.class); http .addFilter(new LoginFilter(authenticationManager)) .addFilterAfter(jwtFilter, UsernamePasswordAuthenticationFilter.class); } }를 구현하고, 로그인이 완료 되었을 때, @Override protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException { log.info("successfulAuthentication 함수 실행: 로그인 성공"); PrincipalDetails principalDetails = (PrincipalDetails) authResult.getPrincipal(); /* 로그인 완료, 1. 토큰 생성 2. 쿠키 장착 */ response.setHeader("gd", "gdgd"); // response.sendRedirect("/api/loginTest"); // super.successfulAuthentication(request, response, chain, authResult); }이 메서드 까지 구현했습니다. 제 원래 로직은액세스 토큰, 리프레쉬 토큰을 생성하고리프레쉬 토큰을 DB에 담고액세스 토큰, 레프레쉬 토큰 두 개를 쿠키에 저장하는 로직입니다. ResponseCookie build = ResponseCookie .from("accessToken", "gd") .path("/") .httpOnly(true) // 시간 .maxAge(JwtUtil.REFRESH_TOKEN_EXPIRE_TIME) .sameSite("Lax") .build(); ResponseEntity.ok().header("Set-Cookie", build.toString()) .body("ok");대충 쿠키를 생성해서 그 쿠키를 헤더에 담는 방식을 사용 중인데, 이렇게 로그인 완료 메서드에서 구현할 방법이 없고 헤더에 저장할 방법이 없어서 너무 막막합니다.. Controller에서 그냥 구현하면 ResponseEntity를 이용해서 헤더에 고정적으로 담을 수 있는데로그인 성공 메서드에서 어떻게 해야 이렇게 똑같이 구현을 할 수 있을까요..ㅠㅠㅜ?
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
59강 getProperty가 뜨지 않습니다.
어떤것 때문에 getProperty가 나타나지 않는지 이상하네요
-
해결됨스프링 프레임워크는 내 손에 [스프2탄]
page의 값이 어디서 증가하는지 궁금합니다..
29강 - 리스트에 페이지 번호 구하기를 들으면서 이해가 안가는 부분이 있어 질의 드립니다.페이지 하단에 페이지번호 출력과 각 번호를 누르면 list?page=1, list?page=2 이런식으로 웹이 이동하는 방식 같은 전체적인 프로세스는 강의를 들으면서 이해가 잘되었습니다.한가지 이해가 안가는 부분이 있는데 제목에 작성한것처럼 page의 증가가 어디서 이루어지는지를 잘모르겠습니다.정상적으로 다 작동이 잘되고 디버깅을 이용해서 page가 1 - > 2 로 값이 정상적으로 들어가있는것도 확인하였습니다.코드를 전체적으로 검토를 해봤지만 page를 따로 증가시켜주는 코드는 찾지못했는데 어디서 증가가 되는건지가 궁금합니다 ㅠㅜㅠㅠ
-
미해결스프링부트 시큐리티 & JWT 강의
안녕하세요 강사님 질문이 있습니다.
loadUserByUsername 메서드를 구현하지 않아도로그인 기능, 권한 넘겨주기 다 가능할 거 같은데이 메서드가 꼭 필요한 이유가 있나요?doFilter를 안 탄다고 말씀해주셨는데전 JWT를 쿠키에 저장하는데,쿠키의 값이 없을 때 doFIlter를 그냥 빠져나가는 식으로 구현했습니다. successfulAuthentication이나, 권한을 UsernamePasswordAuthenticationToken authentication // = new UsernamePasswordAuthenticationToken(userId, null, List.of(new SimpleGrantedAuthority("ROLE_USER")));authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); SecurityContextHolder.getContext().setAuthentication(authentication); 이렇게 넣을 수 있던데 이러한 방식은 뭐가 잘못된 걸까요?문제가 생기나요?