【问题标题】:JSP page url not parsing email address as a parameterJSP 页面 url 未将电子邮件地址作为参数解析
【发布时间】:2014-11-21 23:27:00
【问题描述】:

我正在开发 Spring-MVC 应用程序,并且正在开发密码重置功能。发送给用户的令牌由 3 个部分创建,Email-id:timestamp:secretkey.. 例如,当我尝试测试密码重置链接并粘贴我在电子邮件中收到的 url(如下所示)时。我在一个字段中复制了令牌参数,任何 .com 都被忽略了?为什么会这样?任何解决方案。

重置链接网址:

localhost:8085/newpassword/myemail@gmail.com:1416404954901:uXRjA7FAqe0bO_zdwse_4PdVzjQdT1RjJ3QYG5PEODg

JSP页面保存为:

localhost:8085/newpassword/myemail@gmail

resetpassword.jsp 页面:

<c:url var="addAction" value="/newpassword/{token}" ></c:url>
<form:form action="${addAction}" commandName="person">
    <table>
        <tr>
            <td>
                <form:label path="username">
                    <spring:message text="username"/>
                </form:label>
            </td>
            <td>
                <form:input path="username"  />
            </td>
        </tr>

        <tr>
            <td>
                <form:label path="token">
                    <spring:message text="token"/>
                </form:label>
            </td>
            <td>
                <form:input path="token"  />
            </td>
        </tr>


        <tr>
            <td>
                <form:label path="newpassword">
                    <spring:message text="newpassword"/>
                </form:label>
            </td>
            <td>
                <form:input path="newpassword"  />
            </td>
        </tr>
        <tr>
            <td>
                <input name="submit" type="submit" value="Submit" />
            </td>
        </tr>
    </table>
</form:form>
</body>
</html>

控制器代码:

 @RequestMapping(value = "/resetpassword")
    public String newPasswordPage(Model model){
        model.addAttribute("person", new Person());
        return "resetpassword";
    }
   @RequestMapping(value = "/newpassword/{token}")
   public String changePasswordFunction(@ModelAttribute("person") Person person, Model model, @PathVariable("token") String token){
        if(person.getPassword() == null){
            return "resetpassword";
        } else {
            personService.changePassword(token,person.getUsername(),person.getPassword());
            System.out.println("User and password is :"+person.getUsername()+" and password "+person.getPassword());
            model.addAttribute("person",person);
            return "redirect:/";
        }
    }

令牌创建机制:

 @Override
    public void createToken(String username){
        long timestamp = System.currentTimeMillis() - 1_000 * 60 * 60 * 48;
        StringBuilder sb = new StringBuilder();
        sb.append(generateTokenStringPublicPart(username, timestamp));
        sb.append(TOKEN_SEPARATOR);
        try {
            sb.append(computeSignature(username, timestamp, signKey));
        } 
      // The above method returns the String as :
return Base64.encodeBase64URLSafeString(hmac.doFinal(sb.toString().getBytes(StandardCharsets.UTF_8)));

我将该链接传递给此人的电子邮件 ID。有什么解决办法吗?我尝试使用 MD5,它只是整数。

【问题讨论】:

    标签: jsp encryption


    【解决方案1】:

    尝试通过URL encoder 传递令牌。它应该正确地转义所有有问题的字符,以便编码的令牌可以作为 URL 的一部分传递。

    【讨论】:

    • 感谢您的回答,/ 所有内容均已删除,但 .com 中的任何内容均不可见,当用户打开链接时:localhost:8085/newpassword/akshay@gmail.com:1416411570349 :d7v6_sxF9VfCMqBnvBmje6HiDdbYN_R1a4lXAyluEoQ ,然后令牌值只有 akshay@gmail ......知道字符串中的“.com”有什么问题
    • 我刚刚通过将用户添加为 akshay@gmail 进行了检查,并且令牌完美传递。 .com 仍然有问题
    • 您是否尝试过使用 URLEncoder 来包装令牌?因为它将@ 编码为%40 然后它应该可以工作。
    • 我这样编码: URLEncoder.encode( Base64.encodeBase64URLSafeString(hmac.doFinal(sb.toString().getBytes(StandardCharsets.UTF_8)))); .我对“.com”有问题,而不是“@”。
    • This 似乎是相关的。
    猜你喜欢
    • 2019-04-03
    • 2011-01-07
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 2011-05-14
    • 1970-01-01
    相关资源
    最近更新 更多