博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java实现短地址服务
阅读量:7029 次
发布时间:2019-06-28

本文共 2096 字,大约阅读时间需要 6 分钟。

假设下面是你的视频网站链接列表,如果别人想爬取你的数据十分轻松,看规则就知道数据库是序列自增的

http://www.xxxx.com/video/1http://www.xxxx.com/video/2http://www.xxxx.com/video/3

那么解决这一问题,我们可以使用短地址,不对外暴露真实链接,使用对称加密是一个很好的方案。

是一个很好的选择,它提供了JS/PHP/JAVA/PYTHON等编程语言的实现,这里我使用的就是它。

下面是我基于blade框架搭建的java短地址服务。

CREATE TABLE `t_url` (  `id` int(10) NOT NULL AUTO_INCREMENT,  `url` text NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;

路由

@Pathpublic class IndexRoute {        // 盐值	private static final Hashids HASHIDS = new Hashids("blade-shorturl");		private UrlModel urlModel = new UrlModel();	@Route("/:key")	public void get(Request req, Response response) {		String key = req.pathParam(":key").replaceAll("[^A-Za-z0-9]", "");		long[] numbers = HASHIDS.decode(key);		if (null == numbers || numbers.length < 1) {			response.text("没有找到");			return;		}		int id = (int) numbers[0];		String result = get(id).getUrl();		if (result == null) {			response.text("没有找到");			return;		}		response.redirect(result);	}		@Route(value = "/", method = HttpMethod.GET)	public String index() {		return "index";	}		@Route(value = "/", method = HttpMethod.POST)	public String save(Request request, Response response) {		String resJsp = "index";				String longUrl = request.query("url");				if (!isURL(longUrl)) {			request.attribute("error", "无效的URL");			return resJsp;		}				Integer id = this.save(longUrl);		if (id == 0) {			request.attribute("error", "保存失败");			return resJsp;		}				String hash = HASHIDS.encode(id);		request.attribute("url_hash", hash);				System.out.println("id = " + id + ",url_hash=" + hash);				return resJsp;	}	private Integer save(String url) {		return urlModel.insert().param("url", url).executeAndCommit();	}		private UrlModel get(int id) {		return urlModel.fetchByPk(id);	}		private final String REGEX = "\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";		private boolean isURL(String url) {		if(StringKit.isNotBlank(url)){			Pattern pattern = Pattern.compile(REGEX);			Matcher matcher = pattern.matcher(url);			if (matcher.find()) {				return true;			}		}		return false;	}}

实现效果:

转载地址:http://fcwal.baihongyu.com/

你可能感兴趣的文章
chmod更改文件的权限
查看>>
oracle 10g/11g RAC 启停归档模式
查看>>
poj3461 Oulipo
查看>>
OAuth2.0学习(1-12)开源的OAuth2.0项目和比较
查看>>
Gitlab,这也就O了???
查看>>
2014 百度之星 1003 题解 Xor Sum
查看>>
Linux中在主机上实现对备机上文件夹及文件的操作的C代码实现
查看>>
iOS 块的简单理解
查看>>
idea中如何配置git以及在idea中初始化git
查看>>
关于JQuery Class选择器的一点
查看>>
POJ3264 Balanced Lineup
查看>>
redis-cli 连接远程服务器
查看>>
emlog通过pjax实现无刷新加载网页--完美解决cnzz统计和javascript失效问题
查看>>
sublime 之 vitage/emmet
查看>>
代码管理(四)SVN和Git对比
查看>>
python - hadoop,mapreduce demo
查看>>
mongodb常见管理命令
查看>>
1.7 以函数对象取代函数
查看>>
Vue过渡效果之JS过渡
查看>>
Android项目实战(三):实现第一次进入软件的引导页
查看>>