이렇게 설정을 하면 라이브러리에서 로그인 기능을 관리하기 때문에 따로 컨트롤러에 메서드를 만들지 않아도 된다!
oauth라이브러리를 사용한다면 url에도 규칙이 있는데
'/login/oauth2/code'까지는 고정으로 사용을 하고 api 종류에 따라
'/login/oauth2/code/google' 등이 붙는다.
- 또한 '/login/oauth2/code' 이 주소에 대한 컨트롤러 메서드를 만들 필요 없이 라이브러리가 제어해준다.
<!-- oauth 라이브러리 추가-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
spring.security.oauth2.client.registration.google.client-id=클라이언트id
spring.security.oauth2.client.registration.google.client-secret=클라이언트password
spring.security.oauth2.client.registration.google.scope=email,profile
spring.security.oauth2.client.registration.google.authorization-uri=/oauth2/authorization/google
...
</form>
<!--아래 a태그 추가-->
<a href="/oauth2/authorization/google">구글 로그인</a></br>
<a href="/joinForm">회원가입을 아직 하지 않으셨나요?</a>
</body>
...
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/user/**").authenticated()
.antMatchers("/manager/**").access("hasRole('ROLE_MANAGER') or hasRole('ROLE_ADMIN')")
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
.anyRequest().permitAll()
.and()
.formLogin()
.loginPage("/loginForm")
.loginProcessingUrl("/login")
.defaultSuccessUrl("/")
// oauth2관련 설정 추가
.and()
.oauth2Login()
.loginPage("/loginForm"); // 구글로그인 성공 이후에 후처리가 필요
return http.build();
}