1. 페이지별 권한주기
- SecurityConfig에
@EnableGlobalMethodSecurity(securedEnabled = true,prePostEnabled = true)
애노테이션을 추가해서 각컨트롤러에 적용할 @secured , @preAuthorize
애노테이션을 활성화시킨다.
- 필요한 페이지에 다음과 같이 적용시킨다
@Secured("ROLE_ADMIN")
@ResponseBody
@GetMapping("/info")
public String info(){
return "개인정보";
}
@PreAuthorize("hasRole('ROLE_MANAGER') or hasRole('ROLE_ADMIN')")
@ResponseBody
@GetMapping("/data")
public String data(){
return "개인정보";
}
2. google Oauth2 사용하기
- 먼저 google cloud platform의 api 및 서비스 탭의 OAuth 동의화면으로 이동한다.
1. 페이지별 권한주기
- SecurityConfig에
@EnableGlobalMethodSecurity(securedEnabled = true,prePostEnabled = true)
애노테이션을 추가해서 각컨트롤러에 적용할 @secured , @preAuthorize
애노테이션을 활성화시킨다.
- 필요한 페이지에 다음과 같이 적용시킨다
@Secured("ROLE_ADMIN")
@ResponseBody
@GetMapping("/info")
public String info(){
return "개인정보";
}
@PreAuthorize("hasRole('ROLE_MANAGER') or hasRole('ROLE_ADMIN')")
@ResponseBody
@GetMapping("/data")
public String data(){
return "개인정보";
}
2. google Oauth2 사용하기
- 먼저 google cloud platform의 api 및 서비스 탭의 OAuth 동의화면으로 이동한다.

- 여기서 OAuth를 만들고 앱과 연결!
한다.(이메일만 적고 다 생략)

- 그다음 사용자 인증정보를 가서 다음과같이 리다이렉션 URL을 적고 클라이언트 id 와 secret 키를 발급받는다.
- configure메서드에 체인을 추가한다.
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/user/**").authenticated()
.antMatchers("/manager/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_MANAGER')")
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
.anyRequest().permitAll()
.and() //만약에 권한이 없는 페이지로 들어갈때 로그인페이지로 가게해주는 체인.
.formLogin()
.loginPage("/loginForm")
.loginProcessingUrl("/login") //login 주소가 호출되면 시큐리티가 낚아채서 대신 로그인 진행해줌 즉 컨트롤러에 /login필요없음
.defaultSuccessUrl("/") //로그인 완료됬을대 페이지
.and()
.oauth2Login()
.loginPage("/loginForm") //구글로그인 완료된 후처리 필요
//1. 코드받기(인증) 2. 엑세스토큰(권한)
//3. 사용자 프로필 정보를 가져오고 4-1 그정보를 토대로 회원가입을 진행시키거나
//4-2 기본정보(이메일,아이디,이름,전화번호) 정보가 모자라면 ex) 쇼핑몰 ->(집주소), 백화점몰 ->(등급)
.userInfoEndpoint()
.userService(principalOauth2UserService); //Tip. 코드X,(액세스 토큰 +사용자 프로필정보)
}
- 체인 맨아래 userService에 추가되는 Service 클래스를 생성한다.
package com.hy.demo.config.oauth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService;
import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest;
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.stereotype.Service;
@Service
public class PrincipalOauth2UserService extends DefaultOAuth2UserService {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
logger.info("userRequest = " + userRequest.getClientRegistration());
logger.info("getAccessToken.getTokenValue() = " + userRequest.getAccessToken().getTokenValue());
logger.info("loadUser(userRequest).getAttributes() = " + super.loadUser(userRequest).getAttributes());
return super.loadUser(userRequest);
}
}