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)

私の要件は、Active常に登録することですF(false)が、クリックするとリンクactiveが表示されますtrue(アクティブがtrueの場合は、ログインのみが許可されます)。

では、reset.jspで行う方法は?実は私の考えは

  1. Activeこのためのコントローラーを作成し、列を更新しますTrue(ただし、このためのsidを取得する方法)

  2. SIDを取得すると、実際に上記の暗号化キーが生成されるため、このキーは復号化されてコントローラーに送信され、DBクエリを使用して特定のユーザーを選択し、アクティブをtrueに設定します(ただし、URLキーを取得する方法も聞いてください... request.getParameter(?)

私に提案をください...私はこれを行う方法で立ち往生しています..

にいくつかのサンプルコードを与えるreset.jsp

編集:実際、私はMVCの原則に従っているので、reset.jspを使用せずに直接コントローラークラスを作成する方法を説明します。

4

2 に答える 2

1

アクティブなものと他のものを別のテーブルにする必要があります。

table user

id   username   password


table activation

id active expired_time token user_id

ユーザーがサインアップを完了すると、アクティベーション テーブルに 1 つのレコードを挿入する必要があります。active フィールドは false で、有効期限は今から 2 時間後などです。

次に、トークンを使用してテーブルを検索し、アクティブな作業を行います。

于 2013-03-19T06:44:49.600 に答える
1

reset.jsp は次のようになります。

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

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

おそらくデータベースにアクセスするためのコードがすでにあるので、この例の部分は含めませんが、正しい軌道に乗せることができます。また、更新された行が 1 つある場合はキャッチし、適切に機能している場合はユーザーに情報を返し、行が更新されていない場合は、ユーザーの URL を確認するために非常に役立ちます。

この助けを願っています。

編集 :

サーブレットと同じ方法:

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 Controller と同じ方法:

@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 に答える