### 스프링부트와 클라우드활용 강의용 깃 소스를 스프링부트2 프로젝트를 스프링부트3로 마이그레이션
- 이전 포스트 https://kimilguk.tistory.com/861 에 이어서 계속 작업 합니다.
- 기존 스프링부트2 프로젝트(v2.6.3) : https://github.com/kimilguk/kimilguk-boot2
- 마이그레이션 스프링부트3 프로젝트(v3.2.1) : https://github.com/kimilguk/kimilguk-boot3
09번 까지 작업한 결과화면(DB회원으로 로그인 후 새글을 등록한 화면-아래)
---------------------------------------------------------------------------------------------------------------------------------------------------
09_#글읽기에서 에러메세지 처리(아래 해결방식 1을 사용): Ensure that the compiler uses the '-parameters' flag
스프링부트 3.2버전 부터는 자바 컴파일러에 -parameters 옵션을 넣어주어야 애노테이션의 이름을 생략할 수 있다.
@RequestParam, @PathVariable 두 어노테이션에서 발생하는 문제
해결방식 1) 이클립스 컴파일 시에 -parameters 옵션 적용
-> 이클립스 window메뉴-Preferences창-Java메뉴-Compiler서브메뉴-제일하단체크(아래 이미지 참조)
해결방식 2)
@GetMapping("/posts/read/{id}")//패스경로에 id값이 들어갔다. @PathVariable 사용해서 자바코드에서 사용
public String postsRead(@PathVariable Long id, ...생략 Fail
-> public String postsRead(@PathVariable("id") Long id, ...생략 Ok
08_#스프링부트3에서 추가 : DB용 로그인 사용 시 처리(아래)
/* SecurityConfig.java 파일 내용 중...
@Override 스프링부트3에서 대체 기존내용 주석 처리(아래)
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication()
.dataSource(dataSource)
.rolePrefix("ROLE_")//현재 테이블에 저장될 때 ADMIN, USER로 저장되기 때문에 생략된 부분 추가
.usersByUsernameQuery("select username, password, enabled from simple_users where username = ?")//로그인 인증 쿼리
.authoritiesByUsernameQuery("select username, role from simple_users where username = ?");//DB에서 권한 가져오는 쿼리
* 메모리용 인증과 권한 코딩
* auth.inMemoryAuthentication()
* .withUser("admin").password(passwordEncoder().encode("1234")).roles("ADMIN")
* .and()
* .withUser("user").password(passwordEncoder().encode("1234")).roles("USER")
* .and()
* .withUser("guest").password(passwordEncoder().encode("1234")).roles("GUEST");
*
}
*/
// 스프링부트3에서 추가 : DB용 로그인 사용 시(아래)
// WebSecurityConfigurerAdapter 방식으로 인증 처리를 진행 하기 위해 기존엔 Override 하여 구현했지만
// Spring Security 6/스프링부트3 부터는 AuthenticationManagerBuilder를 직접 생성하여 AuthenticationManager를 생성해야 한다.
@Autowired
public void configure (AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication()
.dataSource(dataSource)
.rolePrefix("ROLE_")//현재 테이블에 저장될 때 ADMIN, USER로 저장되기 때문에 생략된 부분 추가
.usersByUsernameQuery("select username, password, enabled from simple_users where username = ?")//로그인 인증 쿼리
.authoritiesByUsernameQuery("select username, role from simple_users where username = ?");//DB에서 권한 가져오는 쿼리
}
// 스프링부트3에서 추가 : 메모리용 로그인 사용 시(아래)
/*
@Bean
public InMemoryUserDetailsManager userDetailsService() {
UserDetails admin = User.withUsername("admin")
.password(passwordEncoder().encode("12345"))
.roles("ADMIN")
.build();
UserDetails user = User.withUsername("user")
.password(passwordEncoder().encode("12345"))
.roles("USER")
.build();
return new InMemoryUserDetailsManager(admin, user);
}
*/
- 이 전 내용은 지난 포스트글에 있습니다. 이전 포스트 https://kimilguk.tistory.com/861
앞으로 위 소스를 K-PaaS 컨테이너 플랫폼에 배포 할 예정 입니다.
----------------------------------------------------------------------------------------------------------------------------
### 위 h2-db 를 사용한 내용이 정상 작동해서 그대로 넘어 갔다가....
최근에 postgreSQL db로도 테스트 하다가, 아래 2가지 문제가 발견 되었다.
- 1).아래 DB 생성 명령이 실행 되지 않는 문제 처리
spring.jpa.hibernate.ddl-auto=create
원인은 스프링부트3에서 application-db-postgres.properties 파일 상단의 설정 명령어가 변경 되었기 때문이다.(아래)
#spring.datasource.initialization-mode=always #스프링부트3(2.5 이후) 아래로 변경
spring.sql.init.mode=always
- 2).아래 샘플sql이 실행 시 저장이 되지 않는 문제 처리
#spring.datasource.schema=classpath:import_dummy.sql #스프링부트3(2.5 이후) 아래로 변경 import_dummy.sql내용에서 필드명도 추가했음.(큰 문제는 아니고, 필드 순서가 맞지 않는 문제 발생되어서...)
#spring.datasource.schema → spring.sql.init.schema-locations #JPA를 사용하기 때문에 필요없음
#spring.datasource.data → spring.sql.init.data-locations # 실제는 변경된 이 명령어로 더미 데이터를 입력 가능하다.
spring.sql.init.data-locations=classpath:import_dummy.sql
위 추가로 적용한 소스도 깃에서 확인 가능하다.-> https://github.com/kimilguk/kimilguk-boot3
----------------------------------------------------------------------------------------------------------------------------
Ps. 관련기술참조:
- DB용시큐리티참조 : https://dev-log.tistory.com/4
Spring부트에서 WebFlux 웹 프레임워크 사용해 보기 (1) | 2024.05.02 |
---|---|
스프링부트2 프로젝트를 스프링부트3로 마이그레이션_3/3 (1) | 2024.01.31 |
스프링부트2 프로젝트를 스프링부트3로 마이그레이션_1/3 (1) | 2024.01.28 |
헤로쿠 클라우드플랫폼 기존에 사용하던 스택 업그레이드 (0) | 2022.08.19 |
코트린 프로젝트17 (0) | 2022.06.03 |
댓글 영역