전체 예제 μ½”λ“œλŠ” kdevkr/spring-boot-securityμ—μ„œ 확인할 수 μžˆλ‹€.

Spring Data Integrationλ₯Ό μ°Έκ³ ν•˜λ©΄ μŠ€ν”„λ§ μ‹œνλ¦¬ν‹°μ™€ μŠ€ν”„λ§ 데이터 λͺ¨λ“ˆμ„ 톡합할 수 μžˆλ‹€.
μš°μ„  μ•„λž˜μ™€ 같이 ν΄λž˜μŠ€νŒ¨μŠ€μ— org.springframework.security:spring-security-data μ˜μ‘΄μ„±μ„ μΆ”κ°€ν•˜λ„λ‘ ν•˜μž.

build.gradle
dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jdbc' implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.security:spring-security-data' }
@Bean
public SecurityEvaluationContextExtension securityEvaluationContextExtension() {
	return new SecurityEvaluationContextExtension();
}

ꡬ성 ν΄λž˜μŠ€μ—μ„œ SecurityEvaluationContextExtensionλ₯Ό 빈으둜 λ“±λ‘ν•˜λ©΄ @PreAuthorize와 같은 λ©”μ†Œλ“œ 기반 ν‘œν˜„μ‹κ³Ό λΉ„μŠ·ν•˜κ²Œ @Query λ‚΄μ—μ„œ μŠ€ν”„λ§ μ‹œνλ¦¬ν‹°μ— λŒ€ν•œ SpEL을 μ‚¬μš©ν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ, μŠ€ν”„λ§ μ‹œνλ¦¬ν‹° 곡식 λ¬Έμ„œμ™€ Spring Data에 λŒ€ν•œ 예제 μ½”λ“œμ™€ 같이 μ‹œλ„ν•΄λ³΄λ©΄ μ•„λž˜μ™€ 같은 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

org.springframework.dao.InvalidDataAccessApiUsageException: SQL [SELECT u.username FROM users u where u.username = ?__$synthetic$__1]: given 1 parameters but expected 0

μœ„μ™€ 같은 였λ₯˜κ°€ λ°œμƒν•˜λŠ” μ΄μœ λŠ” Spring Data JDBCλŠ” λ‚΄λΆ€μ μœΌλ‘œ NamedParameterJdbcTemplate**λ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— ?와 같은 JPQL λ˜λŠ” Native 쿼리 λ°©μ‹κ³ΌλŠ” 차이가 μžˆμœΌλ―€λ‘œ ?이 μ•„λ‹Œ :둜 ν‘œν˜„ν•΄μ•Όν•œλ‹€.

@Repository
public interface UserRepository extends CrudRepository<User, String> {
    @Query("SELECT u.username FROM users u where u.username = :#{ principal?.username }")
    String getUsername();
}