はじめまして、みあらと申します。
「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】
「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】<%@ 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の時の転送先
<% } %>
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;
}
}
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関数を使います。つまり、ハッシュ値同士を比較するわけですね。
今週はとても忙しいので、以降の返信は遅くなるかもしれません。すみません。
ざっと見たところでは悪そうなところは無い感じですね。
loginメソッドに正しい文字列が渡されているか確認してみてもらえますか?
よくあるのは、フォームの送り側と受け側でパラメータの綴りが違っているとか、
そういうことがあるかも知れません。
1つ気になったんですが、パスワードを平文でデータベースに格納しているようですね。MySQLにpassword()という関数があるので、それを使ってハッシュ値に変換してからデータベースに保存したほうがよいと思います。照合する際もpassword関数を使います。つまり、ハッシュ値同士を比較するわけですね。
今週はとても忙しいので、以降の返信は遅くなるかもしれません。すみません。
投稿:竹形 誠司[takegata]/2010年 12月 20日 23時 23分
/更新:2010年 12月 20日 23時 23分
さっそくのお返事ありがとうございます!
文字列の確認を行ってみたところ、問題点を発見できました。
恥ずかしながら、私の確認不足が原因でした。
文字列確認用のページでユーザ名がnull表示に・・・
よくよく確認してみたら、login.jspで
<input type="text" name="userName" />
となっているべき部分が name="userNnmae" となっていました・・・
「n」を消したら正常に動作しました。
こちらの確認不足で余計なお手間をとらせてしまい、申し訳ありません;
パスワードもpassword()関数を使ったものに変更しました。
文字列確認のご指摘ありがとうございました!
これからは今まで以上に、しつこいくらいに確認作業を行います・・・。
文字列の確認を行ってみたところ、問題点を発見できました。
恥ずかしながら、私の確認不足が原因でした。
文字列確認用のページでユーザ名がnull表示に・・・
よくよく確認してみたら、login.jspで
<input type="text" name="userName" />
となっているべき部分が name="userNnmae" となっていました・・・
「n」を消したら正常に動作しました。
こちらの確認不足で余計なお手間をとらせてしまい、申し訳ありません;
パスワードもpassword()関数を使ったものに変更しました。
文字列確認のご指摘ありがとうございました!
これからは今まで以上に、しつこいくらいに確認作業を行います・・・。
投稿:みあら[miara]/2010年 12月 21日 01時 10分
/更新:2010年 12月 21日 01時 10分