java url参数转换:

世界上最安全的密码是不存在的密码。 使用完全随机的密钥从等式中删除用户。 公平地说,这有一些缺点,并且密码仍然存在于某处(在您的电话/电子邮件中),但通常这样效果很好...

诀窍很简单,如果我们想验证用户身份,我们可以通过电子邮件向他发送单个使用URL,例如mycoolapp://act-32548b09-d328-4330-8243-d7d30c322e40 。 如您所见,这很难猜测或蛮力。 一旦单击,URL就会变得无效,因此即使以某种方式公开了该URL仍然是无关紧要的。 为此,我们需要两个部分:

  • 服务器逻辑
  • 客户端URL处理

两者都很容易。

服务器

一个警告是mycoolapp将在设备上运行,但是您无法在电子邮件或浏览器中单击它。 因此,我们需要您服务器上的https URL。

服务器看起来像这样,请注意这是Spring Boot Controller代码,但是您应该可以在其中使用任何服务器:

public boolean sendSigninEmail(String e) {List<UserObj> ul = users.findByEmailIgnoreCase(e);if(ul.isEmpty()) {return false;}UserObj u = ul.get(0);u.setHashedActivationToken(UUID.randomUUID().toString()); (1)users.save(u); (2)email.sendEmail(e, "Signin to the Codename One App", "This is a one time link to activate the Codename One App. Click this link on your mobile device: \n\nhttps://ourserverurl.com/app/activateURL?token=act-" + u.getHashedActivationToken()); (3)return true;
}
public User activateViaToken(String t) throws ServerAppAPIException {List<UserObj> ul = users.findByHashedActivationToken(t); (4)if(ul.isEmpty()) {throw new ServerAppAPIException(ServerErrorCodes.NOT_FOUND);}UserObj u = ul.get(0);String val = u.getAppToken(); (5)u.setHashedActivationToken(null); (6)users.save(u);User r = u.getUser();r.setAppToken(u.getAppToken());return r;
}
1个 我们使用UUID生成长激活字符串
2 我们将其保存在数据库中,覆盖旧的URL(如果存在)
3 我们可以发送带有HTTPS URL的电子邮件或SMS来激活应用程序
4 接下来,我们使用收到的令牌激活用户帐户。 我们找到正确的帐户条目
5 访问令牌是服务器生成的安全密码,它是完全随机的,并且仅对应用程序可见
6 现在删除了URL中使用的激活令牌,从而使URL成为一次性使用工具

所有这些大部分都很简单,但是仍然缺少一个。 我们的应用程序需要一个mycoolapp URL,而HTTPS URL不会启动它。 解决方案是302重定向:

@RequestMapping(value="/activateURL", method=RequestMethod.GET)
public void activateURL(@RequestParam String token, HttpServletResponse httpServletResponse)  {httpServletResponse.setHeader("Location", "mycoolapp://" + token);httpServletResponse.setStatus(302);
}

这会将设备自动发送到mycoolapp URL,并使用令牌启动您的应用程序!

客户端

在客户端上,我们需要截获mycoolapp URL并进行解析。 首先,我们需要添加两个新的构建提示:

android.xintent_filter=<intent-filter>   <action android:name="android.intent.action.VIEW" />    <category android:name="android.intent.category.DEFAULT" />    <category android:name="android.intent.category.BROWSABLE" />    <data android:scheme="mycoolapp" />  </intent-filter>
ios.plistInject=<key>CFBundleURLTypes</key>     <array>         <dict>             <key>CFBundleURLName</key>             <string>com.mycompany.myapp.package.name</string>         </dict>         <dict>             <key>CFBundleURLSchemes</key>             <array>                 <string>mycoolapp</string>             </array>         </dict>     </array>

不要忘记将mycoolappcom.mycompany.myapp.package.name修复为应用程序中的适当值

接下来,我们要做的就是在start()方法中检测URL。 这需要驻留在检查当前Form的代码之前:

String arg = getProperty("AppArg", null); (1)
if(arg != null) {if(arg.contains("//")) { (2)List<String> strs = StringUtil.tokenize(arg, "/");arg = strs.get(strs.size() - 1);while(arg.startsWith("/")) {arg = arg.substring(1);}}if(!arg.startsWith("act-")) { (3)showLoginForm();callSerially(() ->Dialog.show("Invalid Key", "The Activation URL is invalid", "OK", null));return;}arg = arg.substring(4);Form activating = new Form("Activating", new BorderLayout(BorderLayout.CENTER_BEHAVIOR_CENTER));activating.add(CENTER, new InfiniteProgress());activating.show();sendActivationTokenToServer(arg); (4)return;
}
1个 这是从全球导入的CN类中获得的。 app参数是URL
2 我们删除参数的URL部分
3 使用act-前缀来验证URL是否正确
4 这会将激活密钥发送到我们上面讨论的服务器逻辑

在模拟器中测试

这将适用于iOS和Android。 从下周开始,您还可以使用模拟器中新的“发送应用程序自变量”菜单选项在模拟器上进行测试。

要将其正确集成到应用程序中,通常需要一个仅接受电子邮件/电话的登录菜单。 或基于Web的UI中的系统将邀请链接发送到应用程序。

Whatsapp使用此技巧的反面来激活其桌面应用程序。 他们会在您的设备上显示QR码,一旦您使用whatsapp手机扫描该QR码,就会激活桌面版本。 那比密码好得多。

翻译自: https://www.javacodegeeks.com/2018/09/tip-activate-via-url-and-send-arguments.html

java url参数转换:

java url参数转换:_提示:通过URL激活并发送参数相关推荐

  1. 提示:通过URL激活并发送参数

    世界上最安全的密码是不存在的密码. 使用完全随机的密钥从等式中删除用户. 公平地说,这有一些缺点,并且密码仍然存在于某个地方(在您的电话/电子邮件中),但通常效果很好. 诀窍很简单,如果我们想对用户进 ...

  2. vue如何使浏览器url固定_关于前端url加密方式总结 (Vue-cli中使用)

    下边是url加密和解密方法 /** * url参数加密 * 传入json格式的串 * @param {*Object} query */ const EncryUrl = query => { ...

  3. java获取url文件格式_本地文件/url获取文件类型

    package com.cjw.baidu.ocr; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringU ...

  4. python播放url音频_如何从URL播放mp3

    抱歉,我没有Python3要在这里测试,要使用pyaudio流mp3您需要在PCM数据中解码它,我知道pymedia可以做到,但它太旧了,只支持python27. 要以正确的方式执行此操作,您需要知道 ...

  5. java reduce 分组_使用JAVA8 stream中三个参数的reduce方法对List进行分组统计

    背景 平时在编写前端代码时,习惯使用lodash来编写'野生'的JavaScript; lodash提供来一套完整的API对JS对象(Array,Object,Collection等)进行操作,这其中 ...

  6. java parameters用法_(四)Parameters,简单参数就用这个

    Parameters注解在测试方法上指定参数列表,然后在测试方法中声明对应的形参,形参与参数列表一一对应,但名字可以不同,如下所示: public class Test1 { @Parameters( ...

  7. java的prefetch()_聊聊FluxFlatMap的concurrency及prefetch参数

    序 本文主要研究下FluxFlatMap的concurrency及prefetch参数 实例 @Test public void testConcurrencyAndPrefetch(){ int c ...

  8. android和flask交互,java - 当我从Android向Flask Web服务发送参数时,如何解决“ SSL库故障”? - 堆栈内存溢出...

    我确实尝试将一些值作为" application / json "从Android应用程序发送到Flask Web服务. 这是我的Java代码 : Thread thread = ...

  9. java 怎么对url解码_如何在Java中进行URL解码?

    在Java中,我想将其转换为: https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do%3Frequest_type 对此: https ...

最新文章

  1. 提高 TDD 效率的一些小诀窍
  2. Juqery让世界更美好--超级简单实用的(上、下)自动翻的最佳效果,有图为证!...
  3. 如何在Outlook中的电子邮件上显示快速操作按钮
  4. axure 组件_技巧分享 | Axure后台组件制作的全过程
  5. jdk7默认gc算法_JDK 7的算法和数据结构
  6. java记录pv,计算500万PV/每天的网站
  7. P5714 【深基3.例7】肥胖问题--python3实现
  8. 硬板床害死中国人?西方人都睡软床垫?究竟是谁睡错了?
  9. python Selenium调用 IE/GoogleChrome/Firefox浏览器驱动的方法及下载地址
  10. 渣渣的leetcode刷题笔记-树(1)
  11. 选择性搜索(selective search)+opencv实现
  12. Form的显式方式。
  13. rs232读取智能电表_预付费电表高性价比型号推荐 预付费抄表系统免费安装
  14. 神经网络信息双向传播,神经网络反向传播推导
  15. 向量叉积和点积混合运算_matlab中的向量的数量积和向量积
  16. [ArcGIS] 空间分析(三)栅格数据
  17. w ndows10输入法设置,Win10输入法设置技巧:切换输入法
  18. Db2 SQL PL简介
  19. 4、基本命令-系统管理
  20. MOS驱动电机正反转

热门文章

  1. 动态规划练习【一】 背包问题
  2. [线性代数学习笔记] 线性递推数列及 Berlekamp-Massey 算法的详细推导过程
  3. P3746 [六省联考 2017] 组合数问题(倍增、dp)
  4. 51nod-有限背包计数问题【dp】
  5. P3261-[JLOI2015]城池攻占【左偏树】
  6. 【2018.5.12】模拟赛之一-ssl2413 排名【玄学】
  7. jzoj1373-食物链【并查集】
  8. codeforces D.MADMAX 动态规划、记忆化搜索
  9. Spark SQL(六)之加载数据的参数配置
  10. Dubbo(一)之简介