Spring Security를 이용해 로그인한 관리자에게만 images를 노출할 수 있습니다.
### build.gradle
implementation 'org.springframework.boot:spring-boot-starter-security'
### 설정
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/images/**").hasRole("ADMIN") // 이미지 리소스에 대한 접근 권한 설정
.anyRequest().permitAll() // 다른 요청은 모두 허용
.and()
.httpBasic(); // 기본 인증 사용
}
}
### application.properties
spring.security.user.name=admin
spring.security.user.password=adminpassword
spring.security.user.roles=ADMIN
### WebConfig
registry.addResourceHandler("/images/**")
.addResourceLocations("file://" + System.getProperty("user.dir") + "/my-images/");
### 참고 : 로그인 구현방식 중 1가지 예제:단, {noop}는 암호화없는 평문이라는걸 알리는 키워드입니다.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/images/**").hasRole("ADMIN")
.anyRequest().authenticated() // 모든 요청에 대해 인증을 필요로 함
.and()
.formLogin(); // 폼 기반 로그인 사용
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("admin").password("{noop}adminpassword").roles("ADMIN");
}
}