implementation 'org.springframework.security:spring-security-oauth2-jose'
implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
+ implementation 'org.springframework.session:spring-session-data-redis:2.0.10.RELEASE'
implementation 'org.jetbrains.kotlin:kotlin-reflect'
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
class ServletInitializer : SpringBootServletInitializer() {
override fun configure(application: SpringApplicationBuilder): SpringApplicationBuilder {
- return application.sources(DlpayApplication::class.java)
+ return application.sources(PayApiApplication::class.java)
}
}
public String generateToken(Map<String, Object> params) throws JoseException {
JwtClaims claims = new JwtClaims();
claims.setIssuer(params.get("issuer").toString()); // who creates the token and signs it
+ if (params.get("audience") != null) {
+ claims.setAudience(params.get("audience").toString());
+ }
claims.setExpirationTimeMinutesInTheFuture(expiration / 60); // time when the token will expire (10 minutes from now)
- claims.setGeneratedJwtId(); // a unique identifier for the token
+ claims.setGeneratedJwtId();
claims.setIssuedAtToNow(); // when the token was issued/created (now)
claims.setNotBeforeMinutesInThePast(2); // time before which the token is not yet valid (2 minutes ago)
- claims.setSubject(params.get("subject").toString()); // the subject/principal is whom the token is about
+ if (params.get("subject") != null) {
+ claims.setSubject(params.get("subject").toString()); // the subject/principal is whom the token is about
+ }
/*
claims.setClaim("email", "mail@example.com"); // additional claims/attributes about the subject can be added
List<String> groups = Arrays.asList("group-one", "other-group", "group-three");
import javax.persistence.Id;
@RedisHash("app_client")
-public class AppClientRedis {
+public class ApiClientRedis {
private @Id
String id;
import javax.persistence.Table;
@Entity
-@Table(name = "TT_APICLIENT")
+@Table(name = "TB_APICLIENT")
public class TApiClient {
@Id
@Column(name = "appid", nullable = false, length = 20)
package com.supwisdom.dlpay.framework.redisrepo;
-import com.supwisdom.dlpay.framework.domain.AppClientRedis;
+import com.supwisdom.dlpay.framework.domain.ApiClientRedis;
import org.springframework.data.repository.CrudRepository;
-public interface AppClientRepository extends CrudRepository<AppClientRedis, String> {
+public interface ApiClientRepository extends CrudRepository<ApiClientRedis, String> {
}
import org.springframework.data.redis.connection.RedisStandaloneConfiguration
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory
-import org.springframework.data.redis.core.RedisKeyValueTemplate
-import org.springframework.data.redis.core.RedisTemplate
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories
+import org.springframework.security.authentication.ProviderManager
+import org.springframework.security.authentication.dao.DaoAuthenticationProvider
import org.springframework.security.config.annotation.web.builders.HttpSecurity
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
.readFrom(ReadFrom.SLAVE_PREFERRED)
.build()
val serverConfig = RedisStandaloneConfiguration(server, port)
- if (!password.isNullOrEmpty()) {
+ if (password.isNotEmpty()) {
serverConfig.password = RedisPassword.of(password)
}
serverConfig.database = database
return manager
}
+ @Bean
+ fun daoProvider(detailsService: UserDetailsService): DaoAuthenticationProvider {
+ return DaoAuthenticationProvider().also {
+ it.setUserDetailsService(detailsService)
+ }
+ }
+
+ @Bean
+ fun providerManager(daoProvider: DaoAuthenticationProvider): ProviderManager {
+ return ProviderManager(listOf(daoProvider))
+ }
+
+
companion object {
@Configuration
@Order(1)
class ApiWebSecurityConfigurationAdapter : WebSecurityConfigurerAdapter() {
-// @Autowired
-// private lateinit var clientRegistrationRepository: ClientRegistrationRepository
override fun configure(http: HttpSecurity) {
http.authorizeRequests()
@SpringBootApplication
-class DlpayApplication
+class PayApiApplication
fun main(args: Array<String>) {
- runApplication<DlpayApplication>(*args)
+ runApplication<PayApiApplication>(*args)
}
import com.supwisdom.dlpay.framework.redisrepo.AppClientRepository
import com.supwisdom.dlpay.framework.security.validate.ImageCodeUtil
import com.supwisdom.dlpay.framework.security.validate.VerifyCode
+import com.supwisdom.dlpay.framework.domain.ApiClientRedis
+import com.supwisdom.dlpay.framework.redisrepo.ApiClientRepository
import com.supwisdom.dlpay.framework.service.SystemUtilService
import com.supwisdom.dlpay.framework.util.HmacUtil
import org.springframework.beans.factory.annotation.Autowired
class ApiAuthController {
@Autowired
- lateinit var repo: AppClientRepository
+ lateinit var repo: ApiClientRepository
@Autowired
lateinit var apiClient: ApiClientDao
}.let {
val token = generateRandomToken()
val now = systemUtil.sysdatetime.hostdatetime
- AppClientRedis().apply {
+ ApiClientRedis().apply {
id = appid
loginTimestamp = now
this.token = HmacUtil.HMACSHA256(token, it.secret)
return Base64.getEncoder().encode(random).toString(Charsets.UTF_8)
}
- private fun checkSecretToken(app: AppClientRedis, secret: String): Boolean {
- return (app.token == secret)
+ private fun checkSecretToken(api: ApiClientRedis, secret: String): Boolean {
+ return (api.token == secret)
}
@GetMapping("/authentication")
@GetMapping("/login")
fun loginView() = "login"
-}
\ No newline at end of file
+}