Coding Planet
[Spring Security] ๋ณด์๊ตฌ์ฑ ์ค์ ํ๊ธฐ - context-security.xml(์ ์์ ๋ถ ๋ชจ๋ ํฌํจ) ๋ณธ๋ฌธ
[Spring Security] ๋ณด์๊ตฌ์ฑ ์ค์ ํ๊ธฐ - context-security.xml(์ ์์ ๋ถ ๋ชจ๋ ํฌํจ)
jhj.sharon 2024. 2. 14. 17:33
|Spring Security๋?
- ์ธ์ฆ: ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง ํ์ธํ๋ ๊ณผ์ . ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ ๋ก๊ทธ์ธ ๊ณผ์ ์ด ์ฌ๊ธฐ์ ํด๋นํ๋ค.
- ๊ถํ ๋ถ์ฌ: ์ธ์ฆ๋ ์ฌ์ฉ์๊ฐ ํน์ ์์์ ์ ๊ทผํ๊ฑฐ๋ ์์ ์ ์ํํ ์ ์๋ ๊ถํ์ ๊ฐ์ง๊ณ ์๋์ง ๊ฒฐ์ ํ๋ ๊ณผ์ .
- CSRF(Cross-Site Request Forgery) ๋ณดํธ: ์น ์ ํ๋ฆฌ์ผ์ด์ ์ CSRF ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ๋ณดํธํ๋ค.
- ์ธ์ ๊ด๋ฆฌ: ์ธ์ ๊ณ ์ ๊ณต๊ฒฉ ๋ฐฉ์ง, ๋์ ์ธ์ ์ ์ด, ์ธ์ ๋ง๋ฃ ๊ด๋ฆฌ ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- LDAP, ํผ ๊ธฐ๋ฐ ์ธ์ฆ, Basic ์ธ์ฆ ๋ฑ ๋ค์ํ ์ธ์ฆ ๋ฉ์ปค๋์ฆ ์ง์: ๋ค์ํ ์ธ์ฆ ๋ฐฉ๋ฒ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋๋ก ์ง์ํ๋ค.
| context-security.xml ๋ฏ์ด๋ณด๊ธฐ
context-security.xml ์ค์ ํ์ผ์ Spring Security๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ ๊ตฌ์ฑ์ ์ ์ํ๋ ์ค์ ํ์ผ์ด๋ค.
<security:http pattern="/auth/login.do" security="none"/>
<security:http pattern="/favicon.ico" security="none"/>
<security:http pattern="/css/**" security="none"/>
<security:http pattern="/html/**" security="none"/>
<security:http pattern="/images/**" security="none"/>
<security:http pattern="/js/**" security="none"/>
<security:http pattern="/resource/**" security="none"/>
<security:http pattern="\A/WEB-INF/jsp/.*\Z" request-matcher="regex" security="none"/>
<egov-security:config id="securityConfig"
loginUrl="/auth/login.do"
logoutSuccessUrl="/"
loginFailureUrl="/auth/login.do?code=failure"
accessDeniedUrl="/auth/login.do?code=denied"
dataSource="egov.dataSource"
jdbcUsersByUsernameQuery="SELECT m.USER_ID, m.USER_ID AS PSWD, 1 ENABLED, m.user_nm, '' as USER_ZIP,
'' as USER_ADRES, '' as USER_EMAIL, 'GNR' as USER_SE, '' as ORGNZT_ID, m.user_id as ESNTL_ID,
m.inst_nm as ORGNZT_NM,
(
SELECT author_cd
FROM author
WHERE del_yn = 'N'
AND user_id = m.user_id
ORDER BY author_sn DESC
LIMIT 1
) as AUTZR_CD
FROM user_info m
WHERE m.id_del_yn = 'N' AND concat('GNR', m.user_id) = ?"
jdbcAuthoritiesByUsernameQuery="select user_id,
case author_cd
when 'OP' then 'ROLE_OPER'
when 'AD' then 'ROLE_ADMIN'
else 'ROLE_USER' end as authority
from author where del_yn = 'N' and user_id = ?"
jdbcMapClass="chungnam.portal.sec.security.common.EgovSessionMapping"
requestMatcherType="regex"
hash="plaintext"
hashBase64="false"
concurrentMaxSessons="1"
concurrentExpiredUrl="/auth/login.do"
errorIfMaximumExceeded="false"
defaultTargetUrl="/index.do"
alwaysUseDefaultTargetUrl="true"
sniff="true"
xframeOptions="SAMEORIGIN"
xssProtection="true"
cacheControl="false"
csrf="false"
csrfAccessDeniedUrl="/egovCSRFAccessDenied.do"
/>
<egov-security:secured-object-config id="securedObjectConfig"
sqlHierarchicalRoles="
SELECT a.CHLDRN_ROLE as child, a.PARNTS_ROLE parent
FROM COMTNROLES_HIERARCHY a LEFT JOIN COMTNROLES_HIERARCHY b on (a.CHLDRN_ROLE = b.PARNTS_ROLE)"
sqlRolesAndUrl="
SELECT a.ROLE_PTTRN url, b.AUTHOR_CODE authority
FROM COMTNROLEINFO a, COMTNAUTHORROLERELATE b
WHERE a.ROLE_CODE = b.ROLE_CODE
AND a.ROLE_TY = 'url' ORDER BY a.ROLE_SORT"
sqlRolesAndMethod="
SELECT a.ROLE_PTTRN as "method", b.AUTHOR_CODE authority
FROM COMTNROLEINFO a, COMTNAUTHORROLERELATE b
WHERE a.ROLE_CODE = b.ROLE_CODE
AND a.ROLE_TY = 'method' ORDER BY a.ROLE_SORT"
sqlRolesAndPointcut="
SELECT a.ROLE_PTTRN pointcut, b.AUTHOR_CODE authority
FROM COMTNROLEINFO a, COMTNAUTHORROLERELATE b
WHERE a.ROLE_CODE = b.ROLE_CODE
AND a.ROLE_TY = 'pointcut' ORDER BY a.ROLE_SORT"
sqlRegexMatchedRequestMapping="
SELECT a.ROLE_PTTRN uri, b.AUTHOR_CODE authority
FROM COMTNROLEINFO a, COMTNAUTHORROLERELATE b
WHERE a.ROLE_CODE = b.ROLE_CODE
AND a.ROLE_TY = 'regex'
ORDER BY a.ROLE_SORT"
/>
<egov-security:initializer id="initializer" supportMethod="true" supportPointcut="false" />
<!-- URL์ ์ธ๋ฏธ์ฝ๋ก (semicolon)ํ์ฉ ์ฌ๋ถ(๊ธฐ๋ณธ๊ฐ/false) -->
<bean id="egovStrictHttpFirewall" class="org.springframework.security.web.firewall.StrictHttpFirewall">
<property name="allowSemicolon" value="true"/>
</bean>
<security:http-firewall ref="egovStrictHttpFirewall"/>
</beans>
1. ๋ณด์ ์์ธ ์ฒ๋ฆฌํ๊ธฐ
<security:http pattern="/auth/login.do" security="none"/>
์ ์ฝ๋๋ ํน์ URL ํจํด์ ๋ํ ๋ณด์ ํํฐ ์ ์ฉ์ ์์ธ๋ก ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ด๋ค. ๋ก๊ทธ์ธ ํ์ด์ง์ ๊ฒฝ์ฐ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ ๊ทผ ๊ฐ๋ฅํด์ผํ๋ฏ๋ก ๋ก๊ทธ์ธ ํ์ด์ง์ ํด๋นํ๋ URL์ Spring Security ๊ธฐ๋ฅ์ ๊บผ๋ ๊ฒ์ด๋ค.
์ฆ, ์ฌ์ฉ์๊ฐ /auth/login.do URL์ ์ ๊ทผํ ๋, ์ธ์ฆ(๋ก๊ทธ์ธ) ์ ์ฐจ ์์ด๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก ์ค์ ํ๋ ๊ฒ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ก๊ทธ์ธ ํ์ด์ง๋, ๊ณต๊ฐ์ ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํด์ผ ํ๋ ์์(์: CSS, JS ํ์ผ ๋ฑ)์ ์ด๋ฌํ ์ค์ ์ ์ฌ์ฉํ๋ค.
2. <egov-security:config> ์ ์์ ๋ถ ํ๋ ์์ํฌ ํ์ฅ ๊ธฐ๋ฅ
์ ์์ ๋ถ์์ ์ ๊ณตํ๋ ํ์ฅ ์ค์ ์ผ๋ก Spring Security๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ, ๋ก๊ทธ์ธ ๋ฐ ๋ก๊ทธ์์ ์ฒ๋ฆฌ, ์ธ์ ๊ด๋ฆฌ ๋ฑ์ ๋ณด์ ๊ด๋ จ ์ค์ ์ ์ปค์คํฐ๋ง์ด์ฆํ๊ธฐ ์ํ ๋ค์ํ ์์ฑ์ ์ ๊ณตํ๋ค. ์ฃผ์ ๊ธฐ๋ฅ์ ์๋์ ๊ฐ๋ค.
- ๋ก๊ทธ์ธ ๋ฐ ๋ก๊ทธ์์ ๊ด๋ จ URL ์ค์ : ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ๊ฑฐ๋ ๋ก๊ทธ์์ํ ๋ ์ด๋ํ URL์ ์ง์ ํ๋ค.
- loginUrl: ๋ก๊ทธ์ธ ํ์ด์ง์ URL
- logoutSuccessUrl: ๋ก๊ทธ์์ ์ฑ๊ณต ์ ๋ฆฌ๋๋ ์ ๋ URL
- loginFailureUrl: ๋ก๊ทธ์ธ ์คํจ ์ ๋ฆฌ๋๋ ์ ๋ URL
- accessDeniedUrl: ์ ๊ทผ ๊ถํ์ด ์์ ๋ ๋ฆฌ๋๋ ์ ๋ URL
- ๋ฐ์ดํฐ ์์ค ๋ฐ ์ฌ์ฉ์ ์ ๋ณด ์กฐํ ์ค์ : ์ธ์ฆ ๊ณผ์ ์์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์กฐํํ๊ธฐ ์ํ SQL ์ฟผ๋ฆฌ์ ๋ฐ์ดํฐ ์์ค๋ฅผ ์ง์
- dataSource: ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์กฐํํ ๋ ์ฌ์ฉํ ๋ฐ์ดํฐ ์์ค์ ๋น ์ด๋ฆ
- jdbcUsersByUsernameQuery: ์ฌ์ฉ์ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์กฐํํ SQL ์ฟผ๋ฆฌ
- jdbcAuthoritiesByUsernameQuery: ์ฌ์ฉ์์ ๊ถํ ์ ๋ณด๋ฅผ ์กฐํํ SQL ์ฟผ๋ฆฌ
- ์ธ์
๊ด๋ฆฌ: ๋์ ๋ก๊ทธ์ธ ์ธ์
์๋ฅผ ์ ํํ๊ณ , ์ธ์
๋ง๋ฃ ์์ ์ฒ๋ฆฌ๋ฅผ ์ค์
- concurrentMaxSessons: ๋์์ ํ์ฉ๋๋ ์ต๋ ์ธ์ ์
- concurrentExpiredUrl: ์ธ์ ๋ง๋ฃ ์ ๋ฆฌ๋๋ ์ ๋ URL
- ๋ณด์ ๊ด๋ จ ํค๋ ์ค์ : ์น ์ ํ๋ฆฌ์ผ์ด์
๋ณด์์ ๊ฐํํ๊ธฐ ์ํ ์ฌ๋ฌ HTTP ํค๋ ์ค์ ์ ์ ๊ณต
- sniff: ๋ธ๋ผ์ฐ์ ์ MIME ํ์ ์ค๋ํ์ ๋ฐฉ์ง
- xframeOptions: ํด๋ฆญ์ฌํน ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ๋ณดํธํ๊ธฐ ์ํด ํ๋ ์ ๋ด์์์ ํ์ด์ง ๋ ๋๋ง์ ์ ํ
- xssProtection: ๋ธ๋ผ์ฐ์ ์ XSS ํํฐ๋ฅผ ํ์ฑํ
- cacheControl: ๋ธ๋ผ์ฐ์ ์บ์ฑ์ ๋นํ์ฑํ
- csrf: ์ฌ์ดํธ ๊ฐ ์์ฒญ ์์กฐ(CSRF) ๊ณต๊ฒฉ ๋ฐฉ์ง ๊ธฐ๋ฅ์ ํ์ฑํ/๋นํ์ฑํ๋ฅผ ์ค์
3. <egov-security:secured-object-config> ์ ์์ ๋ถ ํ๋ ์์ํฌ ๋ณด์ ๋ชจ๋
<egov-security:secured-object-config> ํ๊ทธ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ด์ ๋ณด์ ๊ฐ์ฒด(URL, ๋ฉ์๋, ํฌ์ธํธ ์ปท)์ ๋ํ ์ ๊ทผ ์ ์ด ์ ์ฑ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํตํด ๋์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ์ค์ ์ด๋ค. ์ด ์ค์ ์ ํตํด ๊ฐ๋ฐ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๊ถํ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํน์ URL์ด๋ ๋ฉ์๋์ ๋ํ ์ ๊ทผ ๊ถํ์ ์ธ๋ฐํ๊ฒ ์ ์ดํ ์ ์๋ค. ์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๊ถํ ๊ณ์ธต ์ค์ (sqlHierarchicalRoles): ๊ถํ ๊ฐ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ค. ์ด๋ฅผ ํตํด ์์ ๊ถํ์ด ํ์ ๊ถํ์ ์๋์ผ๋ก ํฌํจํ๋ ๊ด๊ณ๋ฅผ ์ค์ ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๊ด๋ฆฌ์ ๊ถํ์ด ์ฌ์ฉ์ ๊ถํ์ ํฌํจํ๋ ๊ด๊ณ ๋ฑ์ ์ ์ํ ์ ์์ต๋๋ค.
- URL ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด ์ค์ (sqlRolesAndUrl): ํน์ URL ํจํด์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ฅผ ํตํด ์ ์ํ๋ค. ์ด๋ฅผ ํตํด ๊ฐ URL์ ๋ํ ์ ๊ทผ ๊ถํ์ ๋์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
- ๋ฉ์๋ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด ์ค์ (sqlRolesAndMethod): ํน์ ๋ฉ์๋ ํธ์ถ์ ๋ํ ์ ๊ทผ ์ ์ด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ฅผ ํตํด ์ค์ ํ๋ค. ์ด๋ ์๋น์ค ๋ ์ด์ด์ ๋ฉ์๋์ ๋ํ ๊ถํ์ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- ํฌ์ธํธ์ปท ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด ์ค์ (sqlRolesAndPointcut): AspectJ ํฌ์ธํธ์ปท ํํ์์ ์ฌ์ฉํ์ฌ ์ง์ ๋ ํฌ์ธํธ์ปท์ ๋ํ ์ ๊ทผ ์ ์ด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ฅผ ํตํด ์ค์ ํ๋ค. ์ด๋ AOP(Aspect-Oriented Programming)๋ฅผ ํ์ฉํ ๋ณด์ ์ ์ฑ ์ ๊ตฌํํ ๋ ์ฌ์ฉ๋๋ค.
- ์ ๊ท ํํ์ ๋งค์นญ URL ์ ๊ทผ ์ ์ด ์ค์ (sqlRegexMatchedRequestMapping): ์ ๊ท ํํ์์ ์ฌ์ฉํ์ฌ URL ํจํด์ ๋งค์นญํ๊ณ , ํด๋น URL์ ๋ํ ์ ๊ทผ ๊ถํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ฅผ ํตํด ์ค์ ํ๋ค. ์ด๋ ๋ ๋ณต์กํ URL ํจํด์ ์ ๊ทผ ์ ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
3. <egov-security:initializer> ๋ณด์ ๋ชจ๋ ์ด๊ธฐํ ์ค์
์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ ์ด๊ธฐํ ์ ์ด๋ค ๋ณด์ ๊ธฐ๋ฅ์ ํ์ฑํ ํ ์ง ๊ฒฐ์ ํ ์ ์๋ค. ์ด๋ฅผ ํตํด ์ด๊ธฐ ๋ณด์ ์ค์ ์ ๊ฐํธํ๊ฒ ๊ตฌ์ฑํ ์ ์๊ฒ ๋์์ฃผ๋ฉฐ ๊ฐ๋ฐ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ ์๊ตฌ ์ฌํญ์ ๋ง์ถฐ ํ์ํ ๋ณด์ ๊ธฐ๋ฅ์ ์ ํ์ ์ผ๋ก ํ์ฑํํ ์ ์๊ฒ ํด์ค๋ค.
- supportMethod="true": ์ด ์์ฑ์ด true๋ก ์ค์ ๋๋ฉด, ๋ฉ์๋ ์์ค์์์ ๋ณด์ ์ค์ ์ ํ์ฑํํ๋ค. ์ฆ, ํน์ ๋ฉ์๋ ํธ์ถ์ ๋ํ ์ ๊ทผ ์ ์ด๋ฅผ ๊ตฌํํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ด๋ ์๋น์ค ๋ ์ด์ด๋ ์ปจํธ๋กค๋ฌ ๋ ์ด์ด์์ ํน์ ๋น์ฆ๋์ค ๋ก์ง์ ์คํ ๊ถํ์ ์ธ๋ฐํ๊ฒ ์ ์ดํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- supportPointcut="false": ์ด ์์ฑ์ด false๋ก ์ค์ ๋๋ฉด, ํฌ์ธํธ์ปท์ ์ฌ์ฉํ ๋ณด์ ์ค์ ์ ๋นํ์ฑํ๋๋ค. ํฌ์ธํธ์ปท์ ์ฌ์ฉํ ๋ณด์ ์ค์ ์ AspectJ ํํ์์ ํ์ฉํ์ฌ, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ํ ์ง์ (์: ๋ฉ์๋ ์คํ ์ ํ, ๊ฐ์ฒด ์์ฑ ์ ๋ฑ)์ ๋ณด์ ๋ก์ง์ ์ ์ฉํ๋ ๊ณ ๊ธ ๊ธฐ๋ฅ์ด๋ค. ์ด ์ค์ ์ด false๋ผ๋ ๊ฒ์ ํด๋น ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ด๋ฌํ ๋ฐฉ์์ ๋ณด์ ์ค์ ์ ์ฌ์ฉํ์ง ์๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค.
4. StrictHttpFirewall
Spring Security์ HTTP ๋ฐฉํ๋ฒฝ ๊ตฌ์ฑ์ ์ปค์คํฐ๋ง์ด์งํ์ฌ URL ๋ด์ ์ธ๋ฏธ์ฝ๋ก (;)์ ํ์ฉํ๋๋ก ์ค์ ํ๋ ์์์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก, Spring Security์ StrictHttpFirewall ๊ตฌํ์ URL์ ์ธ๋ฏธ์ฝ๋ก ์ ํฌํจํ๋ ์์ฒญ์ ์ฐจ๋จํฉ๋๋ค. ์ด๋ ์ธ๋ฏธ์ฝ๋ก ์ ์ฌ์ฉํ์ฌ ๋ฐ์ํ ์ ์๋ ์ฌ๋ฌ ๋ณด์ ์ทจ์ฝ์ , ์๋ฅผ ๋ค์ด ์ธ๋ฏธ์ฝ๋ก ์ ์ด์ฉํ HTTP ํ๋ผ๋ฏธํฐ ์ค์ผ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํจ์ด๋ค. ํ์ง๋ง ์ด ์ค์ ์ ํตํด ์ธ๋ฏธ์ฝ๋ก ์ ํ์ฉํ ์ ์๋ค.
์ด ๋ฐฉ์์ด ๊ถ์ฅ๋์ง๋ ์์ผ๋ ํน์ ์ ํ๋ฆฌ์ผ์ด์ ๋๋ ๋ ๊ฑฐ์ ์์คํ ์์ URL์ ์ธ๋ฏธ์ฝ๋ก ์ ํ์๋ก ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ด ์ด ๋ ๋ณด์์ ์ฑ ์ ์ ์ฐํ๊ฒ ์กฐ์ ํด์ผํ ๋ ์ฌ์ฉํ ์ ์๋ค. ์ ๋ง ํ์ํ ๋๋ง ์ฌ์ฉํ ๊ฒ!
- StrictHttpFirewall ๋น ์ ์: org.springframework.security.web.firewall.StrictHttpFirewall ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋น์ผ๋ก ์ ์ธํ๋ค. ์ด ํด๋์ค๋ Spring Security์ HTTP ์์ฒญ์ ๋ํ ๋ฐฉํ๋ฒฝ ์ญํ ์ ํ๋ค.
- allowSemicolon ํ๋กํผํฐ: true๋ก ์ค์ ํจ์ผ๋ก์จ, URL ๋ด ์ธ๋ฏธ์ฝ๋ก ์ ์ฌ์ฉ์ ํ์ฉํ๋ค. ๊ธฐ๋ณธ๊ฐ์ false๋ก, ์ธ๋ฏธ์ฝ๋ก ์ ํฌํจํ ์์ฒญ์ ์ฐจ๋จ๋๋ค.
- ๋ฐฉํ๋ฒฝ์ Spring Security ์ค์ ์ ์ ์ฉ: <security:http-firewall> ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ egovStrictHttpFirewall ๋น์ Spring Security์ HTTP ๋ฐฉํ๋ฒฝ์ผ๋ก ์ง์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ HTTP ์์ฒญ ๊ฒ์ฌ ๋ฐฉ์์ ์ปค์คํฐ๋ง์ด์งํ.
'๐ฑSPRING' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] ์ ์์ ๋ถํ๋ ์์ํฌ 4.2 - WebFlux, Nonblocking (0) | 2024.05.07 |
---|---|
@RequestBody ์ด๋ ธํ ์ด์ ์ค๋ช ๋ฐ ์์ (1) | 2024.01.03 |
@Controller์ @RestController์ ์ฐจ์ด๋? (1) | 2024.01.02 |
[MyBatis] test์ ์ซ์, ๋ฌธ์์ด ๋น๊ต (ํฐ ๋ฐ์ดํ, ์์ ๋ฐ์ดํ ๊ตฌ๋ถ ๊ผญ!!!!!) (1) | 2023.11.14 |
PRG(Post/Redirect/Get) ํจํด๊ณผ ์์ (0) | 2023.11.08 |