Skip to content

Commit a1336dd

Browse files
committed
[FIX] #26 SpringBootConfigurable
1 parent d0de5cc commit a1336dd

File tree

7 files changed

+114
-1
lines changed

7 files changed

+114
-1
lines changed

Diff for: SpringBootConfigurable/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# requirement
22

33
```bash
4-
java -javaagent:libs/spring-instrument-5.1.5.RELEASE ...
4+
java -javaagent:libs/spring-instrument-5.1.5.RELEASE.jar ...
55
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.example.kotlin
2+
3+
import org.springframework.boot.autoconfigure.SpringBootApplication
4+
import org.springframework.boot.runApplication
5+
6+
@SpringBootApplication
7+
class SpringBootConfigurableApplication
8+
9+
fun main(args: Array<String>) {
10+
runApplication<SpringBootConfigurableApplication>(*args)
11+
}
12+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.example.kotlin.account
2+
3+
import org.apache.commons.lang3.RandomStringUtils
4+
import org.springframework.beans.factory.annotation.Autowire
5+
import org.springframework.beans.factory.annotation.Configurable
6+
import org.springframework.security.crypto.password.PasswordEncoder
7+
8+
import javax.persistence.*
9+
10+
@Configurable(autowire = Autowire.BY_TYPE)
11+
@Entity
12+
@Access(AccessType.FIELD)
13+
class Account(@Id val id: String,
14+
var password: String) {
15+
16+
@Transient
17+
lateinit var passwordEncoder: PasswordEncoder
18+
19+
constructor() : this("", "")
20+
21+
fun resetPassword() {
22+
val newPassword = RandomStringUtils.randomAlphanumeric(10)
23+
this.password = passwordEncoder.encode(newPassword)
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.example.kotlin.account
2+
3+
import org.springframework.data.jpa.repository.JpaRepository
4+
5+
interface AccountRepository : JpaRepository<Account, String>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.example.kotlin.config
2+
3+
import org.springframework.context.annotation.Configuration
4+
import org.springframework.context.annotation.EnableLoadTimeWeaving
5+
import org.springframework.context.annotation.aspectj.EnableSpringConfigured
6+
7+
@Configuration
8+
@EnableSpringConfigured
9+
@EnableLoadTimeWeaving
10+
class ConfigurableConfig
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.example.kotlin.config
2+
3+
import org.springframework.context.annotation.Bean
4+
import org.springframework.context.annotation.Configuration
5+
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
6+
import org.springframework.security.crypto.password.PasswordEncoder
7+
8+
@Configuration
9+
class SecurityConfig {
10+
11+
@Bean
12+
fun passwordEncoder(): PasswordEncoder {
13+
return BCryptPasswordEncoder()
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.example.kotlin
2+
3+
import com.example.kotlin.account.Account
4+
import com.example.kotlin.config.ConfigurableConfig
5+
import com.example.kotlin.config.SecurityConfig
6+
import org.junit.Test
7+
import org.junit.runner.RunWith
8+
import org.springframework.boot.test.context.SpringBootTest
9+
import org.springframework.context.annotation.Import
10+
import org.springframework.test.context.junit4.SpringRunner
11+
import org.springframework.transaction.annotation.Transactional
12+
13+
import javax.persistence.EntityManager
14+
import javax.persistence.PersistenceContext
15+
16+
import org.assertj.core.api.Assertions.assertThat
17+
18+
@RunWith(SpringRunner::class)
19+
@SpringBootTest
20+
@Transactional
21+
@Import(ConfigurableConfig::class, SecurityConfig::class)
22+
class AccountTest {
23+
24+
@PersistenceContext
25+
private lateinit var entityManager: EntityManager
26+
27+
@Test
28+
fun test_Account_Configurable_검사() {
29+
// given
30+
val account = Account("heowc", "1234")
31+
entityManager.persist(account)
32+
entityManager.flush()
33+
entityManager.clear()
34+
35+
// when
36+
val heowc = entityManager.find(Account::class.java, account.id)
37+
heowc.resetPassword()
38+
entityManager.flush()
39+
entityManager.clear()
40+
41+
// then
42+
val result = entityManager.find(Account::class.java, account.id)
43+
assertThat(result.id).isEqualTo(account.id)
44+
assertThat(result.password).isNotEqualTo(account.password)
45+
}
46+
}

0 commit comments

Comments
 (0)