๋ค์์ ์ธ์ ์ด ์ ์ํ๊ฑฐ๋, ์์ฒญ์ด ์ค๋ฉด ์ธ์ ์ ์ ์ดํ ํ์๊ฐ ์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ Spring Security์ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
์ด์ ์ฌ์ฉ์์ ์ธ์
์ ๋ง๋ฃ์ํจ๋ค.
or ํ์ฌ ์ฌ์ฉ์์ ์ธ์ฆ์ ์คํจ๋ก ์ฒ๋ฆฌํ๋ค.
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.sessionManagement() // ์ธ์
๊ด๋ฆฌ ๋ฑ๋ก
.maximunSessions(1) // ์ต๋ ํ์ฉ ๊ฐ๋ฅํ ์ธ์
์ ์ค์ , -1์ ๋ฌด์ ํ์ผ๋ก ํ์ฉํ๋ค.
.maxSessionPreventsLogin(true) // ๋์ ๋ก๊ทธ์ธ์ ์ฐจ๋จํ๋ค. false๋ก ์ค์ ์ ๊ธฐ์กด์ ์ธ์
์ ๋ง๋ฃ์ํจ๋ค. (๊ธฐ๋ณธ๊ฐ)
.invaliSessionUrl("/notsession") // ์ธ์
์ด ์ ํจํ์ง ์์ ๋ URL ์ค์
.expiredUrl("/notfoundsession") // ์ธ์
์ด ๋ง๋ฃ๋ ๊ฒฝ์ฐ URL ์ค์
}
๋ง์ฝ, ์ฌ์ฉ์๊ฐ ํด์ปค๊ฐ ์ฌ์ด๋์ ์ฟ ํค๋ก ๋ก๊ทธ์ธ์ ์๋ํ๋๋ผ๋ ์ธ์ฆํ ๋ ๋ง๋ค ์๋ก์ด ์ธ์
๊ณผ ์ฟ ํค๊ฐ ์์ฑ๋์ด ๋ณดํธํ๋ ์ญํ ์ ์ํํ๋ค.
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.sessionManagement() // ์ธ์
๊ด๋ฆฌ ๋ฑ๋ก
.sessionFixation()
.changeSessionId() // ๊ธฐ๋ณธ ์ค์ ๊ฐ none, migrateSession, newSession ์ค์ ๊ฐ๋ฅ
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.sessionManagement() // ์ธ์
๊ด๋ฆฌ ๋ฑ๋ก
.sessionCreationPolicy(sessionCreationPolicy.Always) // ํญ์ ์ธ์
์ ์์ฑํ๋ค.
.sessionCreationPolicy(sessionCreationPolicy.If_Required) // ํ์ํ ์ ์์ฑํ๋ค. (๊ธฐ๋ณธ๊ฐ)
.sessionCreationPolicy(sessionCreationPolicy.Never) // ์์ฑํ์ง ์์ง๋ง, ๋ง์ฝ ์ด๋ฏธ ์กด์ฌํ๋ค๋ฉด ์ฌ์ฉํ๋ค.
.sessionCreationPolicy(sessionCreationPolicy.Stareless) // ์์ฑํ์ง ์๊ณ , ์กด์ฌํด๋ ์ฌ์ฉํ์ง ์๋๋ค.
}
Spring Security์ ์ธ์
์ ์ด ํํฐ๋ SessionManagementFilter
๊ฐ ์กด์ฌํ๋ฉฐ ํด๋น ํํฐ์ ์ญํ ์ ์๋์ ๊ฐ๋ค.
- ์ธ์ ์ ๊ด๋ฆฌํ๋ค.
์ธ์ฆ ์ ์ฌ์ฉ์์ ์ธ์ ์ ๋ณด ๋ฑ๋ก/์กฐํ/์ญ์ ๋ฑ์ ์ด๋ ฅ์ ๊ด๋ฆฌํ๋ค.- ๋์ ์ธ์ ์ ์ ์ดํ๋ค.
๋์ผ ๊ณ์ ์ ๋ํ ์ ์ ํ์ฉ ์ต๋ ์ธ์ ์๋ฅผ ์ ํํ๋ค.- ์ธ์ ์ ๊ณ ์ ์ผ๋ก ๋ณดํธํ๋ค.
์ฌ์ฉ์ ์ธ์ฆ์ ์งํํ ๋ ๋ง๋ค ์ธ์ ๊ณผ ์ฟ ํค๋ฅผ ์๋ก ๋ฐ๊ธํ์ฌ ์ฟ ํค ์กฐ์์ ๋ฐฉ์งํ๋ค.- ์ธ์ ์์ฑ ์ ์ฑ ์ ๋ฐ๋ฅธ๋ค.
ConcurrentSessionFilter
๋ ๋งค ์์ฒญ๋ง๋ค ํ์ฌ ์ฌ์ฉ์์ ์ธ์
์ ๋ํ ๋ง๋ฃ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ค. ๋ํ
์ธ์
์ด ๋ง๋ฃ๋์์ ๊ฒฝ์ฐ ์ฆ์ ๋ง๋ฃ๋ก ์ฒ๋ฆฌํ๋ค.
session.isExpired()
๊ฐ true๋ผ๋ฉด, ๋ก๊ทธ์์ ์ฒ๋ฆฌ์ ํจ๊ป ์ฆ์ ์ค๋ฅ ํ์ด์ง๋ฅผ ์๋ตํ๋ค.
์๋ก์ด ๋์ ์ ์ํ ํ๊ฑธ์
๊น๋ฏผ์๋
junhabaeks