현재 포트폴리오를 준비(?)하고 백엔드와 스프링 기초를 잡기 위해서 커뮤니티를 만드는 도중에 큰 난관을 만났다.
커뮤니티로 한정짓지 않아도 여러 가지 시스템을 운영하면 인증과 인가 기능이 거의 필수라고 할 수 있다.
Spring 프레임워크에서 인증과 인가 기능을 구현할 때에 대표적으로 사용하는 것이 바로 이번에 포스팅을 하게 될 Spring Security 이다.
Java에 익숙하지 않아서인지 Spring을 이제 공부하기 시작해서 그런 것인지 거의 몇 일을 헤맸다. 다음부터는 이렇게 헤매지 않고 바로 구현하고, 더 깊게 공부할 수 있도록 기본적인 설정법을 정리해놓자.
가장 처음으로는 의존성 주입이다. 이 의존성은 Java에 익숙하지 않아서 그런지 정말 귀찮고 어렵다..
(Maven은 최근에 거의 사용하지 않는 추세라고도 하고 이번에 Gradle을 사용해서 구현했기 때문에 Gradle에 관한 내용만 정리하고, 다음에 Maven을 사용하면 그 때 다시 포스팅을 하도록 하자)
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.security:spring-security-test'
}
위와 같이 두 가지를 추가하여 사용할 수 있다.
이 내용은 Spring Security에 한정된 내용은 아니고 Spring Boot를 사용할 때에 반드시 알아야하는 내용이지만 조금 늦게 알아서 까먹지 않게 추가해서 넣어본다.
이 Annotation은 Spring Boot에 동작원리와도 관련된 내용이여서 굉장히 복잡한 내용이지만 동작원리와 관련된 내용을 추가하면 내용이 너무 길어질 것 같으니 다음에 포스팅하기로 하고 간단하게 정리해보자.
해당 Annotation은 중요한 annotation 3개를 포함한다.
이러한 주요 Annotation을 포함하여 여러 가지를 포함하고 있어서 반드시 추가하여야한다.
이것을 사용한 Class는 설정 클라스라는 것을 프로그램에게 알려준다.
나는 아직 프로젝트 파일 구조를
이렇게 잡았다.
이러한 구조가 모든 요소를 생각했을 때 좋은 것인지는 모르겠지만 까먹지말고 반드시 Config Package에 생성하는 Class에는 해당 Annotation을 추가해주자.
해당 Annotation은 이름에서도 알 수 있듯이 Web보안을 적용해주는 것 같다(?)
SecurityConfig Class에 가장 먼저 추가하는 메소드로는 설정 메소드이다.
해당 메소드는 SecurityFilterChain 라는 클래스를 resultType으로 설정하여 작성한다. parameterType은 HttpSecurity을 사용한 변수를 사용하여서 node.js에서도 본 chain에 형태로 여러 가지 설정을 해준다.
아래는 내가 간단하게 설정을 한 모습이다.
@Bean
public SecurityFilterChain configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/user/test/{type}").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/logintest")
.loginProcessingUrl("/user/login")
.permitAll()
.and()
.logout()
.permitAll()
;
return http.build();
}
제발 까먹지말자..!