1

サーブレットとjspは初めてですが、簡単なものを書くことができます。現在、webapp のすべてのページに、jsp:include で追加されたログイン フォームがあります。ログインメカニズムを作成したいので、ユーザーが検証された後、リダイレクトされません(単純なサ​​ーブレットメカニズム)が、ログインフォームは消えます(ほとんどの通常のWebサイトのように)。

私が見つけたすべての例は、検証+リダイレクトの方法を教えてくれます。代わりに指定したことを行うにはどうすればよいですか? 複雑な場合は、少なくとも一般的な方向性ですが、今のところ、何をグーグルで正確に検索すればよいかさえわかりません。

ありがとう

4

2 に答える 2

0

ログイン フォーム jsp とログイン認証サーブレットの 2 つのサーブレットを使用します。ログイン フォーム jsp は現在の jsp に似ていますが、検証/リダイレクトは行わず、ユーザーがログインしていない場合はログイン フォームを表示するだけです。セッション属性で確認できます。ユーザーがログインしている場合は、レンダリング時に空白にする必要があります。ログイン フォーム自体は、別のページにリダイレクトするのではなく、AJAX 要求を実行する必要があります。

TL;DR : ログイン jsp は、javascript (AJAX) を使用して LoginServlet との通信を処理する必要があります。

login.jsp:

<% if (session.getAttribute("isLoggedIn") != null) {%>
    $.post('LoginServlet', function(data) {
        //hide this with js
    });
<% } %>

これは LoginServlet に送信され、isLoggedInログインが成功すると属性が設定されます。また、AJAX フォームに json または xml の応答を返します。

public class LoginServlet extends HttpServlet
{
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
        throws ServletException, IOException
    {
        String user = req.getParameter("username");
        String pass = req.getParameter("password");

        if (login(user, pass))
        {
            req.getSession().setAttribute("isLoggedIn", true);
            returnJsonOKAnswer();
        }
        else
        {
            returnJsonInvalidUserOrPassAnswer();
        }
    }
    //...
}
于 2012-04-24T20:28:15.280 に答える
0

セッション変数を使用して、現在ログインしているユーザーがいるかどうかを確認できます。ユーザーがログインしている場合は、ログイン フォームを表示せず、単にログアウト ボタンを表示するだけです。また、ユーザーがログインしていない場合は、ログイン フォームを表示します。

セッション変数は次のように設定できます。

HttpSession ses=request.getSession(); ses.setAttribute("name",user);

セッション変数は次のように参照できます。

HttpSession ses=request.getSession(false); if(ses.getAttribute("name")== null) //set flag to default value and check flag to know no one is currently logged in else //set flag to some other value to show someone is currently logged in

編集

検証サーブレットとログアウト サーブレットで次のコードを使用します (必要になります)。その他の場合は、単純な if-else 条件を使用できます。

HttpSession ses=request.getSession(); ses.setAttribute("name",user);

と:

HttpSession ses=request.getSession(); ses.invalidate();

于 2012-04-24T17:57:34.250 に答える