活碼是一種二維碼,能夠經過後臺配置讓用戶掃碼時跳轉到不一樣的網址。除了二維碼生成接口,本站還實現了多租戶的活碼配置接口,以及活碼後臺jar包,詳見二維碼接口。php
二維碼生成使用了zxing三方包實現,活碼配置接口使用了redis存儲多租戶信息,代碼比較簡單,這裏主要介紹兩個細節。redis
1,多租戶(多域名、多主機)與接口訪問權限的處理問題api
接口訪問權限使用的是ip白名單機制,曾經設計爲標記租戶的主機ip來爲其活碼後臺jar受權接口訪問,但又考慮到活碼後臺託管時不方便處理(單主機+多託管戶),另外接口又已開放給showapi的用戶訪問,因而想到了接口權限與活碼租戶解耦的辦法:ip白名單隻用於受權接口訪問,活碼後臺jar提供showapi_userName參數以便區分多租戶(託管時根據域名不一樣提供不一樣的租戶參數)。app
實際使用場景:dom
用戶甲再showapi註冊了帳戶lurenjia,調用showapi接口訪問活碼配置接口時自動提供了用戶信息lurenjia。url
用戶甲在自有的主機ip上部署了定製的活碼後臺jar包,訪問活碼配置接口時也提供用戶信息lurenjia,所以能夠訪問到上一步配置的跳轉網址。設計
2,活碼後臺jar代碼code
配置用戶信息:定製時僅配置某個域名,託管時多個域名都配置接口
liveqrcode.userNames={"domain1.cn":"lurenjia","domain2.com":"lurenyi"}ip
相關代碼:區分域名傳遞不一樣的用戶信息
@Value("#{${liveqrcode.userNames}}") Map<String, String> userNames;
@RequestMapping(value="/{code}", method=RequestMethod.GET)
public String redirect(@RequestHeader ("host") String host, @PathVariable String code)
String userName = userNames.get(host);
還能夠考慮在活碼後臺分析客戶端的設備參數,讓活碼配置的網址url能夠攜帶變量,例如domain/{os},能夠讓不一樣系統的手機跳轉到不一樣網址,後續能夠考慮支持。