File tree 7 files changed +114
-1
lines changed
main/kotlin/com/example/kotlin
test/kotlin/com/example/kotlin
7 files changed +114
-1
lines changed Original file line number Diff line number Diff line change 1
1
# requirement
2
2
3
3
``` bash
4
- java -javaagent:libs/spring-instrument-5.1.5.RELEASE ...
4
+ java -javaagent:libs/spring-instrument-5.1.5.RELEASE.jar ...
5
5
```
Original file line number Diff line number Diff line change
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 number Diff line number Diff line change
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 number Diff line number Diff line change
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 number Diff line number Diff line change
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 number Diff line number Diff line change
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 number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments