WebSecurityConfigurerAdapter๋ฅผ ๊ตฌํํ Spring Security ์ค์ ํ์ผ ๋ด ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค.
http
.sessionManagement()
.maximumSessions(1)
.maxSessionsPreventsLogin(false)
.expiredUrl("/login")
.sessionRegistry(sessionRegistry());
- maximumSessions ์ต๋ ์ ์ง ๊ฐ๋ฅํ ์ธ์ ์๋ 1๋ก ์ค์
- maxSessionsPreventsLogin ์ ์ค๋ณต ๋ก๊ทธ์ธ์ด ๋์์ ๋ ๋จผ์ ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ฅผ ์ธ์ ์์ ์ํค๋ ค๋ฉด false, ๋์ค์ ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ฅผ ํ๊ธฐ๋ ค๋ฉด true๋ก ์ค์
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
(...)
// logout ํ loginํ ๋ ์ ์๋์์ ์ํ ์ธ์
๋ ์ง์คํธ๋ฆฌ ์ค์
@Bean
public SessionRegistry sessionRegistry() {
return new SessionRegistryImpl();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.sessionManagement()
.maximumSessions(1)
.maxSessionsPreventsLogin(false)
.expiredUrl("/login")
.sessionRegistry(sessionRegistry());
(...)
}
@Override
public void configure(WebSecurity web) throws Exception {
// static ๋๋ ํฐ๋ฆฌ์ ํ์ ํ์ผ ๋ชฉ๋ก์ ์ธ์ฆ ๋ฌด์
web.ignoring().antMatchers("/css/**", "/js/**", "/img/**", "/webfont/**");
}
}
์ค์ํ ์ ์ UserDetailService๋ฅผ ๊ตฌํํ ์๋น์ค ๋ด ์ธ์ฆ์ ๋ด๋นํ ๊ฐ์ฒด๋ equals์ hashcode๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํด์ฃผ์ด ๊ณ์ ID๊ฐ ๊ฐ์ ๊ฒฝ์ฐ ๊ฐ์ ๊ฐ์ฒด๋ก ์ธ์๋๋๋ก ํด์ฃผ์ด์ผ ํ๋ค.
๋กฌ๋ณต ์ฌ์ฉ ์ ์๋์ ๊ฐ์ ์ด๋ ธํ ์ด์ ์ผ๋ก ๊ฐ๋จํ๊ฒ ์ค์ ํ ์ ์๋ค.
@EqualsAndHashCode(of= {"user"})
public class UserPrincipal implements UserDetails { ... }
ํฌ๋กฌ์์ ํ ์คํธ ํด๋ณด๋ ค๋ฉด ์ํฌ๋ฆฟ ์ฐฝ์ ํ๋ ์ด๊ณ ์ฐจ๋ก๋ก ๋ก๊ทธ์ธํด๋ณด๋ฉด ์ค๋ณต ๋ก๊ทธ์ธ์ด ์๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
'๊ฐ๋ฐ > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring boot with Swagger 3.0 (0) | 2022.11.03 |
---|---|
Spring Boot ํ๋ก์ ํธ git ์ฐ๋ (0) | 2022.03.09 |
Spring Boot์ MySQL / Mybatis ์ฐ๊ฒฐํ๊ธฐ (0) | 2022.03.09 |
Spring Boot ํ๋ก์ ํธ ์์ฑํ๊ธฐ (0) | 2022.03.08 |
JPA, Hibernate (0) | 2022.03.08 |
๋๊ธ