如何设计登录界面

awt_boy 2008-01-02 11:04:57
我是个新手,在设计登录页面的时候加入权限验证:但出错了,请帮我分析一下错误和完成代码,
主要想通过获取的输入的用户名和密码,然后查询用户名为条件的数据库,看密码等不等于获得的密码,最后如果查询不到就是用户名错误,代码怎么设计呢?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
String userName,passwd;
userName=request.getParameter("userName");
passwd=request.getParameter("passwd");
String sDBDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
Class.forName(sDBDriver);
String sConnStr="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=bbs";
String username="sa";
String pwd1="";
Connection connWeb=DriverManager.getConnection(sConnStr,username,pwd1);
Statement stmt=connWeb.createStatement();
String query = "SELECT passwd FROM zhanghu where name='"+userName+"'";
ResultSet rs = stmt.executeQuery(query);

//用户名或密码为空,重新登录
if ((userName==null)||(passwd==null)) {
response.sendRedirect("./index.jsp");
}else{
if (rs.next()){
String pwd=rs.getString("passwd");
if(passwd.equals("pwd"))
{
%>
<h2>用户登录成功</h2>
<div align="center"><h1><a href="list.jsp" class="STYLE1">浏览主题</a></h1></div>
<% }else{
response.sendRedirect("./index.jsp");
}
}
}%>
...全文
829 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ycvitamin 2011-04-11
  • 打赏
  • 举报
回复
学习中
fengwenqi 2008-05-10
  • 打赏
  • 举报
回复
我觉得你的程序逻辑没有什么问题!!!
以下几点我觉得要注意:

1.但你写的代码不太规范.
2.而且连接数据库应该封装,数据访问也应该封装.数据访问一般是传一个SQL语句,如果是查询(SELECT), 则返回一个DATATABLE或者是一个数据集,如果是增,删,改,就返回一个int型,表明操作是否成功.
3.对于判断用户名和密码是否为空,不要在服务器端进行判断,在前台用javascript进行判断,但同时在服务器端进行判断也是可以,这样更加安全.
4.操作不成功时,应该给出提示.
5.SQL注入攻击问题要注意.要写带参数的SQL语句.不要用+号来连接SQL语句中的变量.

其他的就没有什么了,还没想到,我也是新手,不对的请指教.!!!
老紫竹 2008-01-02
  • 打赏
  • 举报
回复
但出错了?我查到的是逻辑错误,也就是输入正确的用户和密码也不能正常登陆。

如果是其它错误,贴出来吧!
老紫竹 2008-01-02
  • 打赏
  • 举报
回复
if(passwd.equals("pwd"))
改成
if(passwd.equals(pwd))

其它的没发现大问题,只是
String query = "SELECT passwd FROM zhanghu where name='"+userName+"'";

这句话有标准的安全隐患,SQL注入问题,不过你的代码问题不是异常严重,可以用。

awt_boy 2008-01-02
  • 打赏
  • 举报
回复
其实我还没设计完,你们帮我想下怎么搞啊


主要想通过获取的输入的用户名和密码,然后查询用户名为条件的数据库,看密码等不等于获取的密码,最后如果查询不到就是用户名错误,代码怎么设计呢?
xuliu5519 2008-01-02
  • 打赏
  • 举报
回复
什么地方出错了 ?
说明白你的错误
liqinglin_java 2008-01-02
  • 打赏
  • 举报
回复
个人认为应该这样设计:
1、先检查页面传来的 userName,passwd合法性问题,重点是SQL注入问题,非SQL注入问题前台javascript检查。
2、单独在后台建立验证类进行验证。
3、可以使用开发框架,单纯的jsp+javabean过时了。
针对你的代码可能的错误有以下几点:
1、SQL注入问题。
2、if ((userName==null) ¦ ¦(passwd==null)) {
response.sendRedirect("./index.jsp");
}放在前面,不需要的数据库交互。
3、固定密码:String pwd=rs.getString("passwd");
if(passwd.equals("pwd")) ,"pwd"别加引号。
4、null和“”的区别,都要验证,验证方式代码应该是if ((userName!=null) ¦ ¦(passwd!=null))较合理。
5、你的例子只能学习,无实际开发意义。
beyondlt 2008-01-02
  • 打赏
  • 举报
回复
同意java2000_net 的分析~~!除此之外好像没有什么问题??
a1123454 2008-01-02
  • 打赏
  • 举报
回复
一般习惯是把数据库用javaBean封装起来使用
我是这样写的,仅供参考
public class DBBean {
//连接数据库
public Connection getConnection() {

String Url = "jdbc:odbc:test";
String Driver = "sun.jdbc.odbc.JdbcOdbcDriver";
String user = "";
String password = "sa";

Connection con = null;

try {
Class.forName(Driver);
con = DriverManager.getConnection(Url,user,password);
} catch (ClassNotFoundException ex) {
} catch (SQLException ex) {
ex.printStackTrace();
}
return con;

}

//获得用户的信息
public ResultSet getResultSet(String UserName, String Password) {

PreparedStatement pst = null;
String sql = "select * from User_in where UserName= ? and Password=? ";
ResultSet rs = null;
try {
Connection con = getConnection();
pst = con.prepareStatement(sql);
pst.setString(1, UserName);
pst.setString(2, Password);
rs = pst.executeQuery();
} catch (Exception exception) {
exception.printStackTrace();
}
return rs;
}
}

在登陆页面使用这个javaBean

例如:
<%
String UserName = request.getParameter("UserName");
String Password = request.getParameter("Password");
try {
ResultSet r = DBBean.getResultSet(UserName,Password);
if (!r.next()) {
%>
<jsp:forward page="fault.jsp"/>//不能登陆!
<%}%>

大概方法就是这样,写在一起不便检查,不美观!

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧