我正在构建一个Web应用程序,我有一个登录jsp表单,它将被重定向到一个servlet ......
我的servlet代码:
Login login=new Login();
login.setUserName(request.getParameter("txtUsername"));
login.setPassWord(request.getParameter("txtPassword"));
LoginService ls=new LoginService();
ls.loginValidate(login);
RequestDispatcher rd=request.getRequestDispatcher("/Login.jsp");
rd.forward(request, response);
}
从他们到服务类:
我的服务类代码:
public class LoginService {
Login login=null;
public Login loginValidate(Login login) {
validateLogin(login);
return login;
}
private void validateLogin(Login login) {
this.login=login;
if(login!=null){
LoginDAO ld=new LoginDAO();
DataSource dataSource=new DataSource();
ld.setDataSource(dataSource);
ld.validate(login);
}
}
}
}
从他们到DAO
我的LoginDAO:
public class LoginDAO {
private DataSource dataSource;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public boolean validate(Login login){
boolean status=true;
String sql="select * from Login where UserName=? and PassWord=?";
Connection conn = null;
try{
conn = dataSource.createConnection();
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,login.getUserName());
ps.setString(2,login.getPassWord());
ResultSet rs=ps.executeQuery();
status=rs.next();
}
catch (SQLException e) {
throw new RuntimeException(e);
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {}
}
}
return status;
}
}
当我输入正确的用户名和密码时,它会重定向到成功页面(在此上下文中为Login.jsp),即使我输入错误的un和pw它的重定向,我也明白为什么因为在servlet中调用方法之后我已将它发送到login.jsp所以在任何情况下它都会将我重定向到成功页面。如何解决这个问题...需要帮助..在此先感谢...
答案 0 :(得分:1)
对于LoginDAO中的验证方法,如果表中没有用户名和密码,它将返回一个空的Resultset。根据结果集是否为空,将布尔值返回给Servlet。
public boolean validate(Login login)
{
boolean status=true;
...
...
...
ResultSet rs=ps.executeQuery();
if (!rs.next()){
status=false;
}
return status;
}
在servlet中,您可以在参数中获取返回的值,并根据其值将其重定向到相应的成功或错误页面
Boolean check=ls.loginValidate(login);
if(check==true)
{
RequestDispatcher rd=request.getRequestDispatcher("/Login.jsp");
rd.forward(request, response);
}
else
{
RequestDispatcher rd=request.getRequestDispatcher("/error.jsp");
rd.forward(request, response);
}
LoginService类只能有一个方法loginValidate,它应返回一个布尔值
public boolean loginValidate(Login login) {
Boolean check=false;
if(login!=null){
LoginDAO ld=new LoginDAO();
DataSource dataSource=new DataSource();
ld.setDataSource(dataSource);
check=ld.validate(login);
}
return check;
}
答案 1 :(得分:0)
你有一个返回布尔值的validate方法。使用此方法结果将用户重定向回登录页面,并在密码不匹配时显示一些错误消息。
聚苯乙烯。登录在db中存储普通密码是不安全的。您必须将其加密存储。大多数容器都有内置身份验证的解决方案。