Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // org.springframework.cloud:spring-cloud-starter-oauth2
- // org.springframework.boot:spring-boot-starter-data-jpa
- // com.h2database:h2
- // redefine: spring-security.version == 4.1.0.RELEASE
- package com.example
- import org.springframework.beans.factory.annotation.Autowired
- import org.springframework.boot.CommandLineRunner
- import org.springframework.boot.SpringApplication
- import org.springframework.boot.autoconfigure.SpringBootApplication
- import org.springframework.context.annotation.Bean
- import org.springframework.data.jpa.repository.JpaRepository
- import org.springframework.security.authentication.AuthenticationManager
- import org.springframework.security.core.authority.AuthorityUtils
- import org.springframework.security.core.userdetails.User
- import org.springframework.security.core.userdetails.UserDetailsService
- import org.springframework.security.core.userdetails.UsernameNotFoundException
- import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer
- import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter
- import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer
- import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer
- import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer
- import org.springframework.web.bind.annotation.RequestMapping
- import org.springframework.web.bind.annotation.RestController
- import java.security.Principal
- import java.util.*
- import java.util.stream.Stream
- import javax.persistence.Entity
- import javax.persistence.GeneratedValue
- import javax.persistence.Id
- @EnableResourceServer
- @EnableAuthorizationServer
- @SpringBootApplication
- @RestController
- open class KotlinAuthenticationServiceApplication :
- AuthorizationServerConfigurerAdapter() {
- @Autowired
- lateinit var authenticationManager: AuthenticationManager
- @Bean
- open fun userDetailsService(accountRepository: AccountRepository) = UserDetailsService {
- username ->
- accountRepository.findByUsername(username)
- .map { account ->
- User (account.username,
- account.password,
- account.active,
- account.active,
- account.active,
- account.active,
- AuthorityUtils.createAuthorityList("SCOPE_READ",
- "SCOPE_ADMIN"))
- }
- .orElseThrow {
- UsernameNotFoundException (
- "couldn't find the user ${username}!")
- }
- }
- @Bean
- open fun sampleDataCLR(accountRepository: AccountRepository): CommandLineRunner =
- CommandLineRunner {
- Stream.of("jlong,spring", "pwebb,boot", "dsyer,cloud")
- .map { s -> s.split(",") }
- .forEach { tuple ->
- accountRepository.save(
- Account(tuple[0], tuple[1], true))
- }
- }
- override fun configure(clients: ClientDetailsServiceConfigurer?) {
- clients
- ?.inMemory()
- ?.withClient("acme")
- ?.secret("acmesecret")
- ?.authorizedGrantTypes("password")
- ?.scopes("openid")
- }
- override fun configure(endpoints: AuthorizationServerEndpointsConfigurer?) {
- endpoints?.authenticationManager(this.authenticationManager)
- }
- @RequestMapping ("/user")
- open fun user(principal: Principal) = principal
- }
- fun main(args: Array<String>) {
- SpringApplication.run(KotlinAuthenticationServiceApplication::class.java, *args)
- }
- interface AccountRepository : JpaRepository <Account, Long> {
- fun findByUsername(username: String): Optional <Account>
- }
- @Entity
- open class Account(var username: String ? = null,
- var password: String ? = null,
- var active: Boolean = false) {
- constructor() : this(null, null, false)
- @Id
- @GeneratedValue
- var id: Long = 0
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement