java实现短地址服务

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

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

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

Hashids是一个很好的选择,它提供了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;

路由

@Path
public 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;
	}
}

实现效果:

时间: 2024-10-01 11:30:42

java实现短地址服务的相关文章

java实现短地址服务的方法(附代码)_java

假设下面是你的视频网站链接列表,如果别人想爬取你的数据十分轻松,看规则就知道数据库是序列自增的 http://www.xxxx.com/video/1 http://www.xxxx.com/video/2 http://www.xxxx.com/video/3 那么解决这一问题,我们可以使用短地址,不对外暴露真实链接,使用对称加密是一个很好的方案. Hashids是一个很好的选择,它提供了JS/PHP/JAVA/PYTHON等编程语言的实现,这里我使用的就是它. 下面是我基于blade框架搭建

两种JAVA实现短网址服务算法_java

短网址(Short URL) ,顾名思义就是看起来很短的网址.自从twitter推出短网址服务以后,各大互联网公司都推出了自己的短网址服务.短网址最大的优点就是短,字符少,便于发布.传播.复制和存储. 通过网上的搜索,感觉流传了2种短网址算法,一种是基于MD5码的,一种是基于自增序列的. 1.基于MD5码 : 这种算法计算的短网址长度一般是5位或者6位,计算过程中可能出现碰撞(概率很小),可表达的url数量为62 的5次方或6次方.感觉google(http://goo.gl),微博用的是类似这

网易推短地址服务 方便传播

近日,据搜狐报道,由网易推出网址缩短服务"网易短地址126.am",类似于国外备受欢迎的bit.ly,而后者是Twitter默认的网址缩短服务.相对于长地址,短地址可以更方便的在社交网络.微博.短信.电子邮件中传播,避免超出字符限制和折行. 据官网介绍,网易短地址可以让普通用户把一个长网页地址缩短成类似http://126.am/ohXyK1的短地址.与bit.ly作为Twitter默认的网址缩短服务不同,据消息人士透露,网易短地址这一产品并非为网易微博而开发,但不排除网易微博之后会采

网易全面下线短址服务 官网126.am域名下岗!

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 易名中国(eName.cn)5月13日讯,2012年网易启用非主流域名126.am推出了短网址服务.而昨日,网易宣布旗下短网址服务正式下线,至今不到两年时间,126.am域名也正式下岗. "网易短地址"是一个网易推出的网址缩短服务,早前,网易就发布公告称,网易短地址将于3721.html">2014年4月2

短网址服务Bitly改版成为社交书签网站

腾讯科技讯(Kathy)北京时间5月30日消息,据国外媒体报道,过去4年以来,Bitly已经成为了一个重要的"公用事业"型服务,每天它帮助人们保存. 缩短.共享和跟踪8000万个新链接.但Bitly不想只当链接缩短器,昨天它以社交书签聚合网站的形式(就像Delicious 或 Pinterest)重新推出.虽然Bitly已经是大量网上活动的中心,但它一直都只是流量的管道.这个服务已经成为一个庞大的基础设施项目,人们建立了 250多亿个Bitly链接,这些链接的每天点击量达到300万次.

搭建亿万级别短信服务发送平台

写在开始 阿里云的小伙伴们,走过路过,千万不要错过.之所以起这么唬人的标题,其实就是想让路过的您点一下,顺便关注一下博主.当然你也可以默默地顶完文章然后转身就走人,但是动作一定要快,姿势必须要帅,深藏功名尘与土. 阿里大鱼 阿里大鱼去哪了,这么牛掰的名字,居然被阿里云抛弃了? 显然不是,进入短信后台.阿里云还是给了提示:原短信服务已停止开通. 感谢你对短信服务产品的支持,原短信服务(整合在消息服务内)已停止开通.请前往短信服务控制台,开通新短信服务. 很明显短信服务被整合到消息服务中去了,阿里大

阿里短信服务API接入指南及示例

阿里短信服务,用淘宝账号打通三大运营商通信能力,以开放API方式向开发者提供短信服务.阿里短信服务具备3秒可达.99%到达率和超低资费的优势,并完美支撑了双11"2亿用户,6亿短信,8万并发"的挑战.本文将介绍阿里短信服务API的接入方法,并提供了多种编程语言的调用示例. 订购阿里短信服务 进入阿里云数据市场订购阿里短信服务.阿里短信服务是后付费商品,0元即可订购,成功发送短信后再付费.资费详见商品详情页面. 阿里短信服务接入指南 订购阿里短信服务后,就可以设置短信签名和短信模板,然后

将Java程序注册成系统服务

你是不是在找将Java程序注册成系统服务的方法?试试Java Service Wrapper这个工具吧,你可以从这个网站上面下载你喜欢的版本:http://wrapper.tanukisoftware.org/ ,Java Service Wrapper提供了适合市面上流行的操作系统的版本. 使用Wrapper将Java程序注册成系统服务有三种方式可供选择: 第一种是使用WrapperSimpleApp 这个帮助类来运行你的程序,这个是最简单的方法,也是官方推荐使用的方式,但是这样可能会对你的程

asp怎么访问java的短信接口

 asp 如何访问java的短信接口 对方程序是java做的,提供了一个地址,还有用户名,密码 说往这里传参数就可以发短信,我用ie直接访问此地址,看到的是一个xml文件asp这边需要如何传递短信的一些参数还有用户名密码给对方呢希望别贴教程,点拨一下最好,因为我从网上找了一些范例,但总是只返回状态200 ok 没有任何返回值,也没有发送成短信,所以不知道为什么了用户名密码是用来识别是谁要调用此接口发短信对方提供的url地址 http://10.13.255.196/SmsDownlinkRece