0. 프로젝트 소개(Spring Security) 및 Security에 대하여
1. User Entity 생성(Spring Security)
2. User 회원가입 (Spring Secureity)
3.Jwt의 사용 이유 (Spring Security)
4. Authorization(인증)
- 4-0 Authorization(인증) - 프로세스 설명
- 4-1 Authentication(인증) - UserDetails, UserDetailsService 및 JwtService 생성
- 4-2 Authentication(인증) - UsernamePasswordAuthenticationfilter 생성
- 4-3 Authentication(인증) - CorsFilter(선택사항)
- 4-4 Authentication(인증) - SecurityConfig
5. Authorization(인가)
- 5-1 Authorization(인가) - Jwt 인가 관련 에러 처리
- 5-2 Authorization(인가) - Jwt 인가 서비스 로직 추가
- 5-3 Authorization(인가) - AuthorizationFilter 생성
- 5-4 Authorization(인가) - SecurityConfig에 인가 관련 method 추가
6. OAuth
SecurityConfig 수정(인가관련 method 추가)
@Slf4j
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final JwtService jwtService;
private final CorsConfig corsConfig;
private final AuthenticationEntryPointImpl authenticationEntryPointImpl;
private final AccessDeniedHandlerImpl accessDeniedHandlerImpl;
@Override
public void configure(WebSecurity web) {
web.ignoring().mvcMatchers( "/", "/common/**");
web.ignoring().requestMatchers(PathRequest.toStaticResources().atCommonLocations()); // 정적인 리소스들에 대해서 시큐리티 적용 무시.
}
@Override
public void configure(HttpSecurity http) throws Exception {
http.addFilterBefore(new BeforeFilter(), BasicAuthenticationFilter.class);
http.csrf().disable();
http .addFilter(corsConfig.corsFilter()) //인증(O), security Filter에 등록
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) //세션 사용 x
.and()
.formLogin().disable() // Security에서 제공하는 form로그인 사용 X
.httpBasic().disable() // Http basic Auth 기반으로 로그인 인증창사용 X
.addFilter(authenticationFilter())
.addFilter(new JwtAuthorizationFilter(authenticationManager(), jwtService))
.authorizeRequests()
.antMatchers("/user/**")
.hasAuthority("ROLE_USER")
.antMatchers("/manager/**")
.hasAuthority("ROLE_MANAGER")
.and()
.exceptionHandling()
.authenticationEntryPoint(authenticationEntryPointImpl)
.accessDeniedHandler(accessDeniedHandlerImpl);
}
public UsernamePasswordAuthenticationFilter authenticationFilter() throws Exception{
JwtAuthenticationFilter authenticationFilter = new JwtAuthenticationFilter(jwtService, authenticationManager());
authenticationFilter.setFilterProcessesUrl("/login");
return authenticationFilter;
}
}
추가된 코드
AccessDeniedHandlerImpl
private final AccessDeniedHandlerImpl accessDeniedHandlerImpl;
AccessDeniedHandler를 정의한 클래스로 권한 오류 시 실행되는 handle method를 정의했다
AuthorizationFilter 추가
.addFilter(new JwtAuthorizationFilter(authenticationManager(), jwtService))
AccessDeniedHandlerImpl 추가
.accessDeniedHandler(accessDeniedHandlerImpl);
테스트
USER권한으로 USER 서비스 실행
"ROLE_USER" 권한을 가진 사용자의 토큰으로 "ROLE_USER"권한을 가진 사용자만이 이용할 수 있는 서비스 요청 시 정상적으로 실행이 된다.
USER권한으로 Manger 서비스 실행
여기서 볼 수 있듯이 권한 오류라는 문구와 함께 서비스가 제한되는 것을 볼 수 있다.
'SpringBoot Security' 카테고리의 다른 글
6-1 OAuth 2.0 - 사전 설정 (0) | 2023.08.06 |
---|---|
6-0 OAuth에 대해서 (0) | 2023.07.25 |
5-3 Authorization(인가) - AuthorizationFilter 생성 (0) | 2023.07.11 |
5-2 Authorization(인가) - Jwt 인가 서비스 로직 추가 (0) | 2023.07.11 |
5-1 Authorization(인가) - Jwt 인가 관련 에러 처리 (0) | 2023.07.11 |