인프런 커뮤니티 질문&답변
_csrf 토큰 생성 애러
작성
·
1.5K
0
안녕하세요 강사님 CSRF의 _csrf 토큰을 생성하는 곳에서 에러가 발생해 질문 드립니다.
우선 강사님의 코드를 그대로 작성했었는데
EL1007E: Property or field 'token' cannot be found on null 오류가 발생했습니다.
<meta id="_csrf" name="_csrf" th:content="${_csrf.token}"/>
<meta id="_csrf_header" name="_csrf_header" th:content="${_csrf.headerName}"/>오류 발생 당시 코드입니다.
그래서 아래의 코드로 변경하였습니다.
<meta name="_csrf" th:content="${_csrf?.token}" th:if="${_csrf} ne null">
<meta name="_csrf_header" th:content="${_csrf?.headerName}" th:if="${_csrf} ne null">그랬더니 home 화면에서 csrf 토큰이 제대로 생성되지 않습니다. 하지만 login 화면에서는 같은 코드를 작성했는데 csrf 값이 정상적으로 출력 되었습니다.
해당 전체 코드의 Othkkartho/SpringSecurityLearn at ch4.7 (github.com) 깃허브 링크 입니다.
답변 3
2
같은 문제로 고생하고있던 수강생1입니다.
이 강의를 듣는 분이라면 해당 부분에서 막히는 분들이 있을 것이라해서 해결 방법을 남깁니다. (실전프로젝트 - 인증 프로세스 Ajax 인증 구현 -> 7) Ajax 로그인 구현 & CSRF 설정)
해당 강의 내용에서 AjaxSecurityConfig.java 파일에서 HttpSecurity를 설정하는 부분이 있을텐데 그 부분에서 보면 antMatchers에 "/api/login"만 permitAll로 설정해주는 것을 볼 수 있습니다. 이 부분에 홈에 대한 url도 허용해주셔야 csrf 토큰이 생성이 되더군요; 별거 아닌 문제지만, 처음 시큐리티를 접하는 사람이라면 찾기가 참 어려운 문제인 것 같습니다...
강의가 소스와 싱크가 너무 안맞는 부분, 그로인해 생기는 문제 해결책이 업뎃 안되는 것이 너무 아쉽네요;
0
0

오스카르소 님
application.yml 혹은 application.properties 파일이 빠져 있습니다.
확인 후 업데이트 부탁드립니다.
그리고 코드를 실제 실행 후 파일이 누락된 부분이 없는지 확인 부탁드립니다.
감사합니다.

application.properties는
spring.datasource.url=jdbc:postgresql://localhost:5432/springlearndb
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
spring.thymeleaf.cache=false
spring.devtools.livereload.enabled=true
spring.devtools.restart.enabled=true
spring.main.allow-bean-definition-overriding=true입니다. datasource 유저 이름과 비밀번호는 제외했습니다.
코드 누락 부분은 내일 한 번 더 확인하겠습니다. 하지만 코드에 오류가 나고 나서 login의 파일 위치를 제외하고는 git에 있는 내용과 최대한 맞추려고 했습니다.
<meta name="_csrf" th:content="${_csrf?.token}" th:if="${_csrf} ne null">
<meta name="_csrf_header" th:content="${_csrf?.headerName}" th:if="${_csrf} ne null">이 구문은 _csrf 토큰의 생성 구문 아닌가요? 혹시 다른 코드와 연계 하는 방식인가요?
우선 계속 확인해 보겠습니다. 우선 지금까지 해결된 부분은 딱히 없습니다.






 권한설정은 순서에 엄청민감한가봐요... 순서안맞추면 제대로작동을안하네요 ㅠㅠ
권한설정은 순서에 엄청민감한가봐요... 순서안맞추면 제대로작동을안하네요 ㅠㅠ
여기부분 문제일 수도 있는데
AjaxSecurityConfig.java 의
http.csrf().disable(); 이게 남아있는지도 확인해주시면 좋을거 같습니다
저는 이 코드가 남아있어서 csrf이 생성되지 않았고 에러가 났었습니다
*저는 참고로 로그인 버튼 클릭시에도 에러가 났었습니다.