ZenShiroRealm.kt 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package com.gxzc.zen.umps.config
  2. import com.gxzc.zen.api.sys.service.ISysUserService
  3. import com.gxzc.zen.umps.common.ZenAuthToken
  4. import com.gxzc.zen.umps.common.ZenSimpleByteSource
  5. import org.apache.shiro.authc.*
  6. import org.apache.shiro.authz.AuthorizationInfo
  7. import org.apache.shiro.authz.SimpleAuthorizationInfo
  8. import org.apache.shiro.realm.AuthorizingRealm
  9. import org.apache.shiro.subject.PrincipalCollection
  10. import org.slf4j.LoggerFactory
  11. import org.springframework.beans.factory.annotation.Autowired
  12. /**
  13. *
  14. * @author NorthLan
  15. * @date 2018/4/23
  16. * @url https://noahlan.com
  17. */
  18. class ZenShiroRealm : AuthorizingRealm() {
  19. companion object {
  20. private val logger = LoggerFactory.getLogger(ZenShiroRealm::class.java)
  21. }
  22. @Autowired
  23. private lateinit var userService: ISysUserService
  24. init {
  25. this.name = "zen_realm"
  26. }
  27. /**
  28. * 登陆验证
  29. */
  30. override fun doGetAuthenticationInfo(token: AuthenticationToken): AuthenticationInfo {
  31. logger.debug("ZenShiroRealm doGetAuthenticationInfo [${token.principal}]")
  32. if (token !is ZenAuthToken) {
  33. throw AccountException("token must be ZenAuthToken")
  34. }
  35. // 获取用户信息
  36. val user = token.user ?: throw UnknownAccountException()
  37. // 账号锁定判定
  38. if (user.lock != null && user.lock!!) {
  39. throw LockedAccountException()
  40. }
  41. return SimpleAuthenticationInfo(user.account, user.password, ZenSimpleByteSource(user.account + user.salt), user.username)
  42. }
  43. /**
  44. * <p>调用subject的权限验证,如 hasRole,hasPermission <br>
  45. * 将调用此方法给subject设置定义的权限
  46. * 而后交由Realm处理 <br></p>
  47. * 现改为集中式基于数据库的动态权限管理,此功能不做任何处理
  48. */
  49. override fun doGetAuthorizationInfo(principals: PrincipalCollection?): AuthorizationInfo {
  50. logger.debug("ZenShiroRealm doGetAuthorizationInfo [${principals?.primaryPrincipal}]")
  51. return SimpleAuthorizationInfo()
  52. }
  53. }