eajniii / chijin_final

1 stars 1 forks source link

[개발] CSRF 설정 구체화 #40

Closed jisoo449 closed 6 months ago

jisoo449 commented 6 months ago

설명

Spring security는 기본적으로 CSRF Protection 기능을 제공한다.
이로 인해 프론트-백 연결이 제대로 수행되지 않는 문제가 발생할 수 있다. 이를 해결하기 위해서는 CORS를 허용할 origin을 직접 지정해 주어야 한다.

현재 /stu/main/resources의 config 폴더에 정의된 context-security.xml에서 csrf를 disabled로 설정 해 두었다. 따라서 이에 대한 조치가 필요하다.

jisoo449 commented 6 months ago

참고할 수 있는 코드

<security:http auto-config="true" use-expressions="true">
    <!-- 특정 경로에 대한 접근 제어 -->
    <security:intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />
    <security:intercept-url pattern="/user/**" access="hasRole('ROLE_USER')" />
    <security:intercept-url pattern="/**" access="permitAll" />

    <!-- Custom Login Page -->
    <security:form-login 
        login-page="/login" 
        default-target-url="/home" 
        authentication-failure-url="/login?error=true" 
        username-parameter="username" 
        password-parameter="password" />

    <!-- Logout Configuration -->
    <security:logout 
        logout-success-url="/login?logout=true" />

    <!-- CSRF Protection -->
    <security:csrf disabled="true"/>

    <!-- CORS Configuration -->
    <security:cors configuration-source-ref="corsConfigurationSource"/>
</security:http>

<!-- CORS Bean Configuration -->
<bean id="corsConfigurationSource" class="org.springframework.web.cors.UrlBasedCorsConfigurationSource">
    <property name="corsConfigurations">
        <map>
            <entry key="/**">
                <bean class="org.springframework.web.cors.CorsConfiguration">
                    <property name="allowedOrigins">
                        <list>
                            <value>*</value>
                        </list>
                    </property>
                    <property name="allowedMethods">
                        <list>
                            <value>GET</value>
                            <value>POST</value>
                        </list>
                    </property>
                </bean>
            </entry>
        </map>
    </property>
</bean>