package com.gxzc.zen.umps.config import com.gxzc.zen.api.sys.service.ISysUserService import com.gxzc.zen.umps.common.ZenAuthToken import com.gxzc.zen.umps.common.ZenSimpleByteSource import org.apache.shiro.authc.* import org.apache.shiro.authz.AuthorizationInfo import org.apache.shiro.authz.SimpleAuthorizationInfo import org.apache.shiro.realm.AuthorizingRealm import org.apache.shiro.subject.PrincipalCollection import org.slf4j.LoggerFactory import org.springframework.beans.factory.annotation.Autowired /** * * @author NorthLan * @date 2018/4/23 * @url https://noahlan.com */ class ZenShiroRealm : AuthorizingRealm() { companion object { private val logger = LoggerFactory.getLogger(ZenShiroRealm::class.java) } @Autowired private lateinit var userService: ISysUserService init { this.name = "zen_realm" } /** * 登陆验证 */ override fun doGetAuthenticationInfo(token: AuthenticationToken): AuthenticationInfo { logger.debug("ZenShiroRealm doGetAuthenticationInfo [${token.principal}]") if (token !is ZenAuthToken) { throw AccountException("token must be ZenAuthToken") } // 获取用户信息 val user = token.user ?: throw UnknownAccountException() // 账号锁定判定 if (user.lock != null && user.lock!!) { throw LockedAccountException() } return SimpleAuthenticationInfo(user.account, user.password, ZenSimpleByteSource(user.account + user.salt), user.username) } /** *
调用subject的权限验证,如 hasRole,hasPermission
* 将调用此方法给subject设置定义的权限
* 而后交由Realm处理