package cn.com.qmth.markingaudit.service.impl; import java.util.concurrent.TimeUnit; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.qmth.boot.core.exception.StatusException; import com.qmth.boot.core.security.annotation.AuthorizationComponent; import com.qmth.boot.core.security.service.AuthorizationService; import com.qmth.boot.tools.signature.SignatureType; import cn.com.qmth.markingaudit.bean.AkInfo; import cn.com.qmth.markingaudit.service.MonitorService; import cn.com.qmth.markingaudit.support.AccessInfo; import cn.com.qmth.markingaudit.support.CustConstants; import cn.com.qmth.markingaudit.utils.AuthorizationCreateUtil; @Service @AuthorizationComponent(prefix = { CustConstants.URI_PREFIX }, type = SignatureType.SECRET) public class AuthServiceImpl implements AuthorizationService { @Autowired private CaffeineCacheService caffeineCacheService; @Autowired private MonitorService monitorService; @Override public AccessInfo findByIdentity(String identity, SignatureType signatureType, String path) { String secret = caffeineCacheService.get(identity); if (secret == null) { AkInfo ak = getAk(identity); if (ak == null) { throw new StatusException("未找到学校信息,code 错误"); } secret = AuthorizationCreateUtil.buildApiSecret(ak.getAccessKey(), ak.getAccessSecret()); caffeineCacheService.set(identity, secret, 5, TimeUnit.MINUTES); } return new AccessInfo(identity, secret); } private AkInfo getAk(String schoolCode) { return monitorService.getAk(schoolCode); } }