自定义注解拦截web请求对返回结果进行有针对的替换

本文旨在解决浏览器或平台封禁静态资源域名的问题。通过AOP拦截器,结合自定义注解@StaticResourceMapping,实现后台接口返回结果时对指定域名的动态替换。具体方案包括在Redis中存储替换规则,使用注解标记需拦截的方法,并在AOP后置通知中遍历并替换对象中的域名。
摘要由CSDN通过智能技术生成

目地:

很多程序页面中会用到很多的静态资源文件(image/css/js),有些是页面中初始化加载的,有些是通过后台接口返回给页面动态加载的。这些静态资源文件的域名是写死的(www.xxx.com/ss.xxx.com),目前有些浏览器或平台会对这些域名封禁,我们需要一个能快速替换静态资源文件地址中域名的方案。

方案:

后台的接口,在返回结果时对有包含指定的域名进行替换。这里考虑使用AOP拦截器,对@StaticResourceMapping的注解进行切面拦截,通过后置通知获取返回的对象,遍历对象中的属性进行域名替换。

1,定义一个模型,包含要替换的域名和替换后的域名,存放在redis中

package com.bxm.hcmony.sc.domain;

import org.apache.commons.collections.CollectionUtils;

import java.net.URI;
import java.util.List;

/**
 * <h3>替换模型</h3>
 * <p></p>
 *
 * @author hcmony
 * @since V1.0.0, 2019/01/23 11:32
 */
public class ResourceModel {

	/**
	 * 源目标
	 */
	private List<String> sourceList;
	/**
	 * 替换目标
	 */
	private String targetUrl;

	public List<String> getSourceList() {
		return sourceList;
	}

	public void setSourceList(List<String> sourceList) {
		this.sourceList = sourceList;
	}

	public String getTargetUrl() {
		return targetUrl;
	}

	public void setTargetUrl(String targetUrl) {
		this.targetUrl = targetUrl;
	}

	public boolean isContains(String url){

		if(CollectionUtils.isEmpty(sourceList)){
			return false;
		}

		if(sourceList.contains(getHost(url))){
			return true;
		}

		return false;
	}


	private String getHost(String url){
		URI uri;
		try {
			uri = URI.create(url);
			return uri.getHost();
		} catch (Exception e) {
			return url;
		}
	}
}

2,定义一个注解,标注在方法上面,对有些标注的方面进行拦截

package com.bxm.hcmony.sc.domain;

import java.lang.annotation.*;

/**
 * <h3>主要应用于静态资源拦截 {@link StaticResourceReplaceHandler}</h3>
 *
 *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值