竹形誠司 ブログ
ご質問    »トピック一覧
掲示板へのスパムが多いため、「ご質問」のコーナーはユーザー登録制とさせていただきました。お手数ですが、上の「新規ユーザーの登録」メニューより登録をお願いします。
帳票Web
アプリケーション

受注開発始めました
詳しくは こちら
竹形 誠司 著/ラトルズ刊
JSP帳票アプリケーション実践開発入門
JSP帳票アプリケーション
実践開発入門

JSP業務アプリケーション短期開発入門
JSP業務アプリケーション
短期開発入門

Java+MySQL+Tomcatで始めるWebアプリケーション構築入門
Java+MySQL+Tomcatで始めるWebアプリケーション構築入門

Java+MySQL+Tomcatで作る掲示板とブログ
Java+MySQL+Tomcatで作る
掲示板とブログ
ログイン処理について質問です
by みあら[miara]
はじめまして、みあらと申します。

「Java+MySQL+Tomcatで作る掲示板とブログ」を参考にプログラムを作っているのですが、
ログイン処理がうまくいかないので質問させていただきます。

ログイン画面(login.jsp)で正しいユーザ名とパスワードを入力しても、
何故かfalse扱いになってエラー画面(login_error.jsp)に飛んでしまいます。
コマンドプロンプトでUser.javaに書いたSQL文を実行すると、
ちゃんとレコードを検索してくるので、SQL文と登録情報は間違ってないはずなのですが・・・

ど素人なので、どこを直せばいいのかが、まったく分かりません;
ご教示お願いします。

以下に必要と思われる情報を載せておきます。

【環境】
 Windows XP
 Tomcat 6.0.29
 MySQL 5.1.46

【ファイル位置】
 webapps/jsp10
  login.jsp
  login2.jsp
  login_error.jsp
  manage.jsp

 webapps/jsp10/WEB_INF/classes/fsearch
  User.class

【login2.jsp】
<%@ page contentType="text/html; charset=Windows-31J" %>
<%@ page import="fsearch.*" %>
<jsp:useBean class="fsearch.User" id="user" scope="session"/>
<%
String stUserName = request.getParameter("userName");
String stPassword = request.getParameter("userPass");

boolean blResult = user.login(stUserName,stPassword);
if(blResult){
%>
    <jsp:forward page="manage.jsp" />    //trueの場合の転送先
<% }else{ %>
    <jsp:forward page="login_error.jsp" />    //falseの時の転送先
<% } %>
【User.java】
package fsearch;

import java.sql.*;
import java.util.*;
import javax.sql.*;
import javax.naming.*;

public class User{

//ユーザ名とパスワードの照合
    public boolean login(String stUserName, String stPassword) throws Exception{
        boolean blResult;
        Context context = new InitialContext();
        DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/Jsp10");
        Connection conn = ds.getConnection();
        PreparedStatement ps = conn.prepareStatement
            ("SELECT * FROM user WHERE userName =? AND userPass =?");
            ps.setString(1, stUserName);
            ps.setString(2, stPassword);
        ResultSet rs = ps.executeQuery();
        if(rs.next()){
            blResult = true;
        }else{
            blResult = false;
        }
        return blResult;
    }
}
投稿:みあら[miara]/2010年 12月 20日 22時 22分 /更新:2010年 12月 20日 22時 23分
RE:ログイン処理について質問です
by 竹形 誠司[takegata]
竹形です。こんばんは。
ざっと見たところでは悪そうなところは無い感じですね。
loginメソッドに正しい文字列が渡されているか確認してみてもらえますか?
よくあるのは、フォームの送り側と受け側でパラメータの綴りが違っているとか、
そういうことがあるかも知れません。

1つ気になったんですが、パスワードを平文でデータベースに格納しているようですね。MySQLにpassword()という関数があるので、それを使ってハッシュ値に変換してからデータベースに保存したほうがよいと思います。照合する際もpassword関数を使います。つまり、ハッシュ値同士を比較するわけですね。

今週はとても忙しいので、以降の返信は遅くなるかもしれません。すみません。
投稿:竹形 誠司[takegata]/2010年 12月 20日 23時 23分 /更新:2010年 12月 20日 23時 23分
RE:ログイン処理について質問です
by みあら[miara]
さっそくのお返事ありがとうございます!

文字列の確認を行ってみたところ、問題点を発見できました。
恥ずかしながら、私の確認不足が原因でした。

文字列確認用のページでユーザ名がnull表示に・・・
よくよく確認してみたら、login.jspで
<input type="text" name="userName" />
となっているべき部分が name="userNnmae" となっていました・・・
「n」を消したら正常に動作しました。

こちらの確認不足で余計なお手間をとらせてしまい、申し訳ありません;

パスワードもpassword()関数を使ったものに変更しました。

文字列確認のご指摘ありがとうございました!
これからは今まで以上に、しつこいくらいに確認作業を行います・・・。
投稿:みあら[miara]/2010年 12月 21日 01時 10分 /更新:2010年 12月 21日 01時 10分