0

实际上在我的 java 应用程序中注册是他们的,所以我正在向用户电子邮件发送邮件。

<bean id="activateAccountTemplate" class="org.springframework.mail.SimpleMailMessage">
    <property name="subject" value="Account activation" />
    <property name="text">
        <value>
        <![CDATA[
            <html><body><p>Dear %s</p><p>Click <a href="http://localhost:8080/EClass/reset.jsp?a=%s">here</a> to activate your account.</p></body></html>
        ]]>
        </value>
    </property>
</bean>

所以这是完美的。点击链接后

http://localhost:8080/EClass/reset.jsp?a=tdpTA3Dz8DYSI+9F/DpMxmxGD/a1Kl+3oYqXc1NNH0U=

听说我正在使用加密机制。

我的数据库有类似...的列S_id, username, password, active(T/F)

我的要求是永远注册ActiveF(false)但单击链接active后将是true(当活动为真时,仅允许登录)。

那么在reset.jsp中怎么做呢?其实我的想法是

  1. 为此编写一个控制器,更新Active列是True(但是如何为此获取 sid)

  2. 获取 SID,实际上会生成上面显示的加密密钥,因此该密钥将被解密并发送到控制器,并使用 DB Query 选择特定用户并将活动设置为 true。(但还要了解如何获取 url 密钥...... request.getParameter(?)

请给我建议...我被卡住了如何做到这一点..

给出一些示例代码reset.jsp

编辑:实际上我遵循 MVC 原则,所以没有 reset.jsp 如何编写直接控制器类..

4

2 回答 2

1

您的 reset.jsp 可能是这样的:

<%
    String token = request.getParameter("a");

    // Connection to DB executing this query :
    // "UPDATE users SET active = true WHERE S_id = " + token
%>

由于您可能已经编写了访问数据库的代码,因此我不会包含此示例部分,但它会让您走上正轨。如果有一行更新,如果它工作正常,如果没有更新行,则将信息返回给用户,以验证他们的 URL,这也是非常有用的。

希望这有帮助。

编辑 :

与 Servlet 相同的方法:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Reset extends HttpServlet {

  public void doGet(HttpServletRequest request, HttpServletResponse response)
                               throws ServletException, IOException {
    String token = request.getParameter("a");

    // Connection to DB executing this query :
    // "UPDATE users SET active = true WHERE S_id = " + token

    response.setContentType("text/html");
    PrintWriter out = res.getWriter();

    out.println("<HTML><BODY>Your response to the user depending on rows updated from SQL</BODY></HTML>");
  }
}

您还需要在 web.xml 中定义:

<servlet>
  <servlet-name>reset</servlet-name>
  <servlet-class>myservlets.reset</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>reset</servlet-name>
  <url-pattern>/reset</url-pattern>
</servlet-mapping>

并更改您的链接:

<a href="http://localhost:8080/EClass/reset?a=%s">here</a>

编辑 :

与 Spring Controler 相同的方法:

@Controller
@RequestMapping(value = "/activation"
public class AccountActivationController
{
    @RequestMapping(method = RequestMethod.GET)
    public String setupForm(@RequestParam("a") String token, ModelMap model) {
        // Connection to DB executing this query :
        // "UPDATE users SET active = true WHERE S_id = " + token

        return successful ? "activationSuccessful" : "activationError";
    }
}

帮不上什么忙,因为我以前从未做过Spring...

于 2013-03-19T05:48:18.870 回答
1

您应该将活动和其他内容放入单独的表格中。

table user

id   username   password


table activation

id active expired_time token user_id

用户完成注册后,应将一条记录插入到激活表中。活动字段为假,过期时间为 2 小时后,等等。

然后使用令牌查表并做主动工作。

于 2013-03-19T06:44:49.600 回答