package com.bizzan.bitrade.core;

import com.bizzan.bitrade.entity.Admin;
import org.apache.shiro.authc.AuthenticationToken;

/**
 * 直接携带 Admin 对象的 Shiro 认证 Token
 * 用于 TokenInterceptor 在 Redis Token 验证成功后，直接通知 Shiro 完成认证，
 * 无需再次查询数据库，保证 @RequiresPermissions 注解正常工作。
 *
 * @author system
 * @date 2026-05-11
 */
public class DirectAdminToken implements AuthenticationToken {

    /** 管理员对象 */
    private final Admin admin;

    /**
     * 构造方法
     *
     * @param admin 已通过 Redis Token 验证的管理员对象
     */
    public DirectAdminToken(Admin admin) {
        this.admin = admin;
    }

    /**
     * 获取管理员对象
     *
     * @return Admin
     */
    public Admin getAdmin() {
        return admin;
    }

    /**
     * Shiro 主体标识（用户名）
     *
     * @return 用户名
     */
    @Override
    public Object getPrincipal() {
        return admin.getUsername();
    }

    /**
     * Shiro 凭证（密码，仅用于 Realm 内部匹配）
     *
     * @return 加密后的密码
     */
    @Override
    public Object getCredentials() {
        return admin.getPassword();
    }
}
