最近利用阿里云oss存储图像,数据库中存储图像的key,在需要返回图像信息时,将key转换为具有时效性的链接,可以有效解决图像的权限问题,防止图像被滥用盗用。上篇文章已经给出了一种将图片直传阿里云oss的解决方案,根据上篇文章,我们的数据库中只需存储key信息,然后在查询的时候统一将key信息转换为临时链接即可。具体的实现是实现mybatis的Interceptor接口重写intercept()方法。
代码实现
/**
* @Description: 拦截器(每次执行完sql,会进入本拦截器),数据库中存储的图片信息是key,对数据的查询统一在这里做获取阿里oss图像链接处理
*/
@Component
@Intercepts({@Signature(type = ResultSetHandler.class, method = "handleResultSets", args = {Statement.class})})
public class MybatisConfig implements Interceptor {
@Autowired
private OssController ossController;
@Override
public Object intercept(Invocation invocation) throws Exception {
// 取出查询的结果
Object resultObject = invocation.proceed();
if (Objects.isNull(resultObject)) {
return null;
}
if (resultObject instanceof List) {
// mapper中的方法,返回值为List<E>
ArrayList resultList = (ArrayList) resultObject;
// 根据具体的业务逻辑进行处理
if (resultList.get(0) instanceof GeoImage){
ArrayList<GeoImage> geoImages = (ArrayList<GeoImage>) resultList;
geoImages.forEach(this::genderUrlInGeoImage);
return geoImages;
}
} else {
// mapper中的方法,返回值为单个实体类
// 根据具体的业务逻辑进行处理
if (resultObject instanceof GeoImage){
return genderUrlInGeoImage((GeoImage) resultObject);
}
}
return resultObject;
}
private GeoImage genderUrlInGeoImage(GeoImage resultObject) {
if (resultObject.getImageIcon()==null){
return resultObject;
}
String s = OssUtil.getImgUrl(resultObject.getImageIcon(),
ossTestController.getOssRoleArn(),
ossTestController.getOssAccessKeyId(),
ossTestController.getOssAccessKeySecret(),
ossTestController.getOssBucket()).toString();
resultObject.setImageIcon(s);
return resultObject;
}
@Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
@Override
public void setProperties(Properties properties) {}
}
© 版权声明
文章版权归原作者所有,转载请注明出处。
THE END