스프링에서 사용하는 UserDetails서비스는 시큐리티가 유저 객체가 존재하는지 각각의 서비스 구현체(inMemory, DAO 등) 를 통해 검색하게 되고 검색된 유저정보를 UserDetails 객체로 변환해서 AuthenticationProvider로 리턴하는 기능을 담당하고 있다. 만약 등록된 사용자가 없는 경우 UsernameNotFoundException 을 리턴하게 된다. UserDetilasService는 인터페이스이며 하나의 메소드만을 가지고 있다. 이를 사용하는 우리는 각각의 시스템의 특성에 맞는 UserDetailsService를 커스터마이징 해서 구현을 하게 되며 기본 적인 규현은 다음과 같다. 간단하게 DB 검색을 통해 유저가 있는 지 확인 후 User 객체를 생성한다. @Overr..
스프링 시큐리티는 정적 파일에 대해서도 보안 검사를 하게 된다. 그렇기 때문에 굳이 보안 필터를 적용할 필요가 없는 리소스에 대해서는 보안 필터를 거치지 않고 바로 통과하도록 지원하는 설정이 WebIgnore 설정이다. 다만 spring security 버전이 올라가면서 해당 설정도 변경이 되었다. 기존 설정 @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { ... @Ovrride public void configure(WebSecurity web) throws Exception { web.ignoring() .requestMatchers(PathRequest.toStatic..
기존에 공부했던 시큐리티 형식이 변경되면서 많은 혼란이 오고 있네요. 특히 저같이 수박 걷핧기 하듯이 공부를 했던 사람들은 더 힘들 것 같습니다. 기본이 중요하다는 사실을 다시한번 알게 됩니다. Spring Security 5.7.0-M2 이후부터는 더이상 WebSecurityConfigurerAdapter 를 extends 해서 쓰지 않게 되면서 Configure 메서드를 오버라이딩 해서 사용했던 InMemory 방식의 유저추가는 다른 형태로 사용할 수 있습니다. //이렇게 사용했었습니다. @Ovrride protected void configure(AuthenticationManagerBuilder auth) throws Exception { String password = passwordEncode..
프로그램이 처음 수행 시 이를 로컬에 설치 된 DB에 스키마와 데이터를 먼저 생성해 넣기 위해서 사용을 할 수 있다. 1. DB의 종류에 따라 다음과 같이 미리 SQL을 넣어둔다. 아래 내용은 Spring 데모 프로젝트인 spring-petclinic 에서 가져왔다. 출처 : github.com/spring-projects/spring-petclinic spring-projects/spring-petclinic A sample Spring-based application. Contribute to spring-projects/spring-petclinic development by creating an account on GitHub. github.com 2. application.properties 파..
매번 스터디 하면서 프로젝트 생성 시 junit5를 적용해서 테스트를 수행하는데 항상 이를 햇갈려서 이곳에 기록해 둔다.... 내 머리는 정말 안좋은 것 같다..ㅜㅜ dependencies { testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude module: 'junit' } testCompile group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.7.0' testImplementation 'org.junit.jupiter:junit-jupiter-api' //이클립스에서는 해당 주석을 푼다. (luncher 없다고 에러 발생..) /..
application.yml 에 대한 실행 환경을 분리하기 위한 방법은 여러가지가 있는 것 같습니다. 우선 몇가지 분리 방법에 대해서 끄적여 보도록 하겠습니다. 1. intellij 를 쓰면서 junit를 이용한 단위 테스트 시.. 단순히 test 디렉토리 밑에 resources를 만들고 안에 application.yml 파일을 넣어두면 작동합니다.... 이클립스 환경에서도 동일하게 될 줄 알고 해보았지면.. 몇일동안 해결 방법을 찾지 못했네요.. (스프링 부트 java 에 강제로 yml 디렉토리 설정해서는 되었지만.. 이는 제가 원하는 방법은 아니었네요..;) 2. 하나의 application.yml 파일에 spring.profiles.active 를 넣어 명시적으로 profile을 지정해 줍니다. s..
요새 JPA관련 공부를 열심히 하려고 하고 있는데.. 역시 메뉴얼 보다 디테일한 문서는 구할 수 없는 것 같습니다. spring.io 에 jpa 관련 메뉴얼을 보면 다음과 같이 Query Creation 이란 항목으로 메소드 이름으로 쿼리를 생성하는 규칙을 보여주고 있습니다. 그대로 복사하여 가져옴.. 메뉴얼을 한참동안 봐야 겠습니다. (언어의 압박으로 ㅜㅜ) 그런데.. 업무용으로 쓰기에는 간단한 조건을 제외하고는 쓰기 힘들겠네요. findByProductNameAndAddDateAndUpdateDateAndUserIdAndUserNameLikeDescAndActiveFalse... 메소드 명이 이따구라면.. 쓰기 힘들긴 하겠네요. ㅎㅎ; And findByLastnameAndFirstname … whe..
혼자 스터디를 하면서 h2연동 및 로깅을 위한 최소한의 설정.. h2데이터 베이스의 패스워드 변동없이 로컬환경에서 복붙해서 사용하려고 함. spring: datasource: url: jdbc:h2:tcp://localhost/~/sample username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: update show-sql: true properties: hibernate.format_sql: true logging: level: org.hibernate.SQL: debug hibernate.format_sql: true 는 로그상에 한 줄로 쭉나오던 쿼리를 sql 포멧처럼 여러줄로 읽기 좋게 출력해 준다. 단...