webapp 登录方式改为 userdetailsservice
diff --git a/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
index 4df76c6..2c62d59 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
@@ -10,6 +10,7 @@
import com.supwisdom.dlpay.framework.domain.TOperator
import com.supwisdom.dlpay.framework.redisrepo.ApiClientRepository
import com.supwisdom.dlpay.framework.security.OperUtil
+import com.supwisdom.dlpay.framework.service.OperatorDetailService
import com.supwisdom.dlpay.framework.service.SystemUtilService
import com.supwisdom.dlpay.framework.util.HmacUtil
import com.supwisdom.dlpay.system.service.CommonService
@@ -17,7 +18,9 @@
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
+import org.springframework.security.core.annotation.AuthenticationPrincipal
import org.springframework.security.core.context.SecurityContextHolder
+import org.springframework.security.core.userdetails.UserDetails
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler
import org.springframework.social.connect.web.HttpSessionSessionStrategy
import org.springframework.stereotype.Controller
@@ -147,11 +150,11 @@
}
@GetMapping("/index")
- fun homeView(model: Model): String {
- model.addAttribute("loginOper", TOperator("111","开发测试"))
- val funclist = functionService.getFunctionsByOperid("111")
+ fun homeView(@AuthenticationPrincipal operUser: UserDetails, model: Model): String {
+ model.addAttribute("loginOper", operUser as TOperator)
+ val funclist = functionService.getFunctionsByOperid(operUser.operid)
model.addAttribute("menus", functionService.getMenuTree(funclist, "-1"))
- model.addAttribute("payapiVersion",commonService.getSystemVersion())
+ model.addAttribute("payapiVersion", commonService.getSystemVersion())
return "index"
}
}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/security.kt b/src/main/kotlin/com/supwisdom/dlpay/security.kt
index 7347908..124eb95 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/security.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/security.kt
@@ -5,6 +5,7 @@
import com.supwisdom.dlpay.framework.dao.OperRoleDao
import com.supwisdom.dlpay.framework.dao.OperatorDao
import com.supwisdom.dlpay.framework.security.ValidateCodeSecurityConfig
+import com.supwisdom.dlpay.framework.service.OperatorDetailService
import com.supwisdom.dlpay.framework.util.StringUtil
import org.jose4j.jwt.consumer.InvalidJwtException
import org.springframework.beans.factory.annotation.Autowired
@@ -16,7 +17,9 @@
import org.springframework.security.authentication.AuthenticationProvider
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken
import org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider
+import org.springframework.security.authentication.dao.DaoAuthenticationProvider
import org.springframework.security.authentication.jaas.AuthorityGranter
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder
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
@@ -60,50 +63,9 @@
}
}
-@Component
-class OperatorAuthenticationProvider : AuthenticationProvider {
- @Autowired
- lateinit var operatorDao: OperatorDao
-
- @Autowired
- lateinit var operRoleDao: OperRoleDao
-
- override fun authenticate(authentication: Authentication?): Authentication {
- return authentication?.let {
- val oper = operatorDao.findByOpercode(it.name)
- ?: throw AuthenticationCredentialsNotFoundException("操作员不存在或密码错误")
- if (BCryptPasswordEncoder().matches(it.credentials.toString(), oper.password)) {
- val roles = operRoleDao.getRolecodeByOperid(oper.operid)
- if (roles.size > 0) {
- oper.authorities = roles.mapNotNull { role ->
- role?.let {
- SimpleGrantedAuthority(role)
- }
- }
- } else {
- oper.authorities = listOf()
- }
- return UsernamePasswordAuthenticationToken(authentication.name, authentication.credentials,
- oper.authorities)
- } else {
- throw AuthenticationCredentialsNotFoundException("操作员不存在或密码错误")
- }
- } ?: throw AuthenticationCredentialsNotFoundException("操作员不存在或密码错误")
- }
-
- override fun supports(authentication: Class<*>?): Boolean {
- return authentication?.equals(UsernamePasswordAuthenticationToken::class.java)
- ?: false
- }
-}
-
@EnableWebSecurity
class WebSecurityConfig {
- @Bean
- fun passwordEncoder(): BCryptPasswordEncoder {
- return BCryptPasswordEncoder()
- }
companion object {
@Configuration
@@ -148,6 +110,26 @@
lateinit var authenticationSuccessHandler: AuthenticationSuccessHandler
+ @Autowired
+ lateinit var userDetailsService: OperatorDetailService
+
+ override fun configure(auth: AuthenticationManagerBuilder) {
+ auth.authenticationProvider(authenticationProvider())
+ }
+
+ @Bean
+ fun authenticationProvider(): DaoAuthenticationProvider {
+ val authProvider = DaoAuthenticationProvider()
+ authProvider.setUserDetailsService(userDetailsService)
+ authProvider.setPasswordEncoder(passwordEncoder())
+ return authProvider
+ }
+
+ @Bean
+ fun passwordEncoder(): BCryptPasswordEncoder {
+ return BCryptPasswordEncoder()
+ }
+
@Bean
fun jdbcTokenImplement(): JdbcTokenRepositoryImpl {
return JdbcTokenRepositoryImpl().also {