H2는 자바 기반의 오픈소스 RDBMS입니다. Server모드, Embedded모드(In memoryDB)를 지원하며 디스크 기반 테이블을 생성할 수 있습니다. 브라우저 기반의 콘솔모드를 이용할 수 있으며 별도의 설치과정이 없고 매우 빠르며 용량도 2MB 이하로 저용량입니다.
SpringBoot에서 제공하는 기본 옵션입니다.
Using the H2 Database Console in Spring Boot with Spring Security
Spring Security를 사용하여 권한을 설정 시 403오류가 발생합니다. 이를 해결해주기 위해 권한을 추가해줍니다. (Spring Security를 아직 적용하지 않았다면 건너뛰어도 됩니다.)
오류 페이지
해당 페이지, favicon.ico의 권한을 추가해줍니다.
Refused to display 'http://localhost:8080/' in a frame because it set 'X-Frame-Options' to 'deny'.
http.headers().frameOptions().sameOrigin();
Spring Security 설정 검색 중 Spring profile로 로컬설정, 그 외 설정으로 나누어 사용하는 글을 참고하여 동일하게 적용 하였습니다.
출처 : https://www.slipp.net/questions/546 (창천향로님)
private final Environment env;
public SecurityConfig(JwtTokenProvider jwtTokenProvider, Environment env) {
this.jwtTokenProvider = jwtTokenProvider;
this.env = env;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
if (isLocalMode()) {
setLocalMode(http);
} else {
setProdMode(http);
}
}
private boolean isLocalMode() {
String profile = env.getActiveProfiles().length > 0 ? env.getActiveProfiles()[0] : "";
return profile.equals("local");
}
private void setLocalMode(HttpSecurity http) throws Exception {
http
.csrf().disable()
.httpBasic().disable();
http
.headers()
.frameOptions()
.sameOrigin();
http
.authorizeRequests()
.antMatchers("/h2-console/*","favicon.ico").permitAll()
.antMatchers("/member/login").anonymous()
.antMatchers("/member/regist").anonymous()
.antMatchers("/member/validate/**").anonymous()
.anyRequest().authenticated()
.and()
.formLogin().disable()
.addFilterBefore(new JwtAuthFilter(jwtTokenProvider), UsernamePasswordAuthenticationFilter.class);
}
private void setProdMode(HttpSecurity http) throws Exception {
http
.csrf().disable()
.httpBasic().disable();
http
.authorizeRequests()
.antMatchers("/member/login").anonymous()
.antMatchers("/member/regist").anonymous()
.antMatchers("/member/validate/**").anonymous()
.anyRequest().authenticated()
.and()
.formLogin().disable()
.addFilterBefore(new JwtAuthFilter(jwtTokenProvider), UsernamePasswordAuthenticationFilter.class);
}