강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của othkkartho
othkkartho

câu hỏi đã được viết

mùa xuân an ninh

7) Triển khai đăng nhập Ajax & Cài đặt CSRF

_csrf 토큰 생성 애러

Viết

·

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">

error.JPGlogin_csrf.JPG

그랬더니 home 화면에서 csrf 토큰이 제대로 생성되지 않습니다. 하지만 login 화면에서는 같은 코드를 작성했는데 csrf 값이 정상적으로 출력 되었습니다.

해당 전체 코드의 Othkkartho/SpringSecurityLearn at ch4.7 (github.com) 깃허브 링크 입니다.

javaspring-bootSpring Security

Câu trả lời 3

2

같은 문제로 고생하고있던 수강생1입니다.

이 강의를 듣는 분이라면 해당 부분에서 막히는 분들이 있을 것이라해서 해결 방법을 남깁니다. (실전프로젝트 - 인증 프로세스 Ajax 인증 구현 -> 7) Ajax 로그인 구현 & CSRF 설정)

해당 강의 내용에서 AjaxSecurityConfig.java 파일에서 HttpSecurity를 설정하는 부분이 있을텐데 그 부분에서 보면 antMatchers에 "/api/login"만 permitAll로 설정해주는 것을 볼 수 있습니다. 이 부분에 홈에 대한 url도 허용해주셔야 csrf 토큰이 생성이 되더군요; 별거 아닌 문제지만, 처음 시큐리티를 접하는 사람이라면 찾기가 참 어려운 문제인 것 같습니다...

강의가 소스와 싱크가 너무 안맞는 부분, 그로인해 생기는 문제 해결책이 업뎃 안되는 것이 너무 아쉽네요;

여기부분 문제일 수도 있는데

AjaxSecurityConfig.java

http.csrf().disable(); 이게 남아있는지도 확인해주시면 좋을거 같습니다

저는 이 코드가 남아있어서 csrf이 생성되지 않았고 에러가 났었습니다

*저는 참고로 로그인 버튼 클릭시에도 에러가 났었습니다.

0

세시간정도 삽질해본결과 아래처럼 해야 정상작동하는듯합니다...

권한설정은 순서에 엄청민감한가봐요... 순서안맞추면 제대로작동을안하네요 ㅠㅠ

0

leaven님의 프로필 이미지
leaven
Người chia sẻ kiến thức

오스카르소 님

application.yml 혹은 application.properties 파일이 빠져 있습니다.

확인 후 업데이트 부탁드립니다.

그리고 코드를 실제 실행 후 파일이 누락된 부분이 없는지 확인 부탁드립니다.

감사합니다.

othkkartho님의 프로필 이미지
othkkartho
Người đặt câu hỏi

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 토큰의 생성 구문 아닌가요? 혹시 다른 코드와 연계 하는 방식인가요?

우선 계속 확인해 보겠습니다. 우선 지금까지 해결된 부분은 딱히 없습니다.

Hình ảnh hồ sơ của othkkartho
othkkartho

câu hỏi đã được viết

Đặt câu hỏi