본문 바로가기
프로그래밍/스프링프레임워크

전자정부표준프레임워크 3.7 에서 CSRF 설정 방법

by pentode 2018. 6. 16.

CSRF

 

전자정부표준프레임워크에서는 Spring Security를 간편하게 설정할 수 있도록 간소화 설정을 제공하고 있습니다. 그런데 3.6 버전에서는 간소화 설정에서 CSRF 설정을 할수가 없어서 편법을 사용해야 했었습니다. 3.6버전에서의 CSRF 설정 방법을 다음글을 참조하세요.

 

"전자정부표준프레임워크 3.6 Spring Security 설정 간소화에서 CSRF 설정하기"

 

전자정부표준프레임워크 3.7 에서는 CSRF 설정을 설정파일 내에서 할 수 있도록 바뀌었습니다. 기본설정은 CSRF를 사용하지 않는 것입니다.

 

설정파일은 /src/main/resources/egovframework/spring/com/context-security.xml 파일 입니다. 설정파일에 기본적으로 CSRF 설정부분은 포함되어 있지 않습니다. 아래 내용을 추가해 주면 되겠습니다.

 

<egov-security:config id="securityConfig"
    loginUrl="/uat/uia/actionSecurityLogin.do"
    logoutSuccessUrl="/uat/uia/actionMain.do"
    loginFailureUrl="/uat/uia/actionSecurityLogin.do?login_error=1"
    accessDeniedUrl="/sec/ram/accessDenied.do"
    dataSource="egov.dataSource"

    jdbcUsersByUsernameQuery=
    "SELECT USER_ID, ESNTL_ID AS PASSWORD, 1 ENABLED, USER_NM, USER_ZIP,

     USER_ADRES, USER_EMAIL, USER_SE,  '-' ORGNZT_ID, ESNTL_ID, '-' ORGNZT_NM
      FROM COMVNUSERMASTER WHERE CONCAT(USER_SE, USER_ID) = ?"


    jdbcAuthoritiesByUsernameQuery=
    "SELECT A.SCRTY_DTRMN_TRGET_ID USER_ID, A.AUTHOR_CODE AUTHORITY

      FROM LETTNEMPLYRSCRTYESTBS A, COMVNUSERMASTER B
    WHERE A.SCRTY_DTRMN_TRGET_ID = B.ESNTL_ID AND B.USER_ID = ?"

    jdbcMapClass="egovframework.let.uat.uia.service.impl.EgovSessionMapping"
    requestMatcherType="regex"
    hash="plaintext"
    hashBase64="false"
    concurrentMaxSessons="1"
    concurrentExpiredUrl="/uat/uia/actionMain.do"
    defaultTargetUrl="/uat/uia/actionMain.do"
    sniff="true"
    xframeOptions="SAMEORIGIN"
    xssProtection="true"
    csrf="true"
/>

 

csrf="true" 로 설정해주면 CSRF 가 동작합니다. 폼에 Spring 폼 태그를 사용하면 자동으로 csrf 토큰이 포함되고, 그렇지 않을경우 직접 토큰을 추가해야 하는것은 동일합니다. 토큰을 추가하는 방법을 글 앞부분의 전자정부표준프레임워크 3.6에서의 사용법을 참조하세요.

반응형