build.gradle
plugins {
id 'org.springframework.boot' version '2.5.11'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
runtimeOnly 'com.h2database:h2'
runtimeOnly 'mysql:mysql-connector-java'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
}
tasks.named('test') {
useJUnitPlatform()
}
@Configuration
@EnableWebSecurity
//Security 기본 설정 가능케 해주는 것들
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
private final UserDetailsService userDetailsService;
private final NaverOAuth2Service oAuth2UserService;
public WebSecurityConfig(
@Autowired CustomUserDetailsService customUserDetailsService,
@Autowired NaverOAuth2Service oAuth2UserService
){
this.userDetailsService = customUserDetailsService;
this.oAuth2UserService = oAuth2UserService;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(this.userDetailsService);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
//허락할 응답
.authorizeRequests()
//url 조작해줄 것
.antMatchers(
"/home/**",
"/user/signup/**",
"/",
"/css/**",
"/images/**",
"/js/**"
)
.anonymous() // 익명의(로그인 안한) 사람도 허용
.anyRequest() //나머지 url에 대한 모든 request
//따라서 마지막에 넣어주어야 한다
___________________________________//이 위 기준으로는 누구나 허용
_________________________________아래부터는 권한 있는 사람만 허용
//로그인, 사용자 인증을 요구
.authenticated()
.and()
.formLogin()
.loginPage("/user/login") // 우리가 만든 로그인 페이지 사용할 것임
.defaultSuccessUrl("/home")
.permitAll() // 모든 권한의 유저를 허용
.and()
.logout()
.logoutUrl("/user/logout") //로그아웃 시 돌아갈 url
.logoutSuccessUrl("/home")
.deleteCookies("JSEESIONID") //세션에 저장된 아이디값 삭제
.invalidateHttpSession(true)
.permitAll()
;
}
}
.and() : 요청 수행 들어왔을 때 처리해줄 추가적 옵션
설명 참조 블로그 : https://kimchanjung.github.io/programming/2020/07/02/spring-security-02/
커스텀 로그인 페이지