java - Struts 数据库登录

标签 java database jsp authentication struts2

我有一个 struts Web 应用程序,它从数据库实现登录页面。我似乎无法让它从登录表单的数据库中正确提取用户名和密码。我正在尝试使用注释代替 struts xml 来重定向我的页面。我确实得到了错误结果,但无法得到成功结果。只需要一些关于我做错了什么的指示即可使其正常工作。

登录.jsp

<jsp:include page="/template/header.jsp" />
<%@ taglib uri="/struts-tags" prefix="s" %>
<title>Login</title>

<div id="loginsection">
<h2>Login in your account&nbsp<img src="images/padlock.png"
alt="padlocklogo" height="40" width="50"></h2>

<div id="loginform">
<s:actionerror />
<s:form action="loginaction" method="post" >
    <s:textfield label="Username" name="username" class="username"/><p></p>
    <s:password label="Password" name="password" cssClass="passwordfield"/>
   <s:submit value="Login" class="submitbutton"/>
</s:form>
</div><br><br><br>


<div id="loginbuttons">
<p>Forgot Password</p><a href="help.jsp" class="helpbutton">Help</a>
<br><br>
<p>Need to Register?</p><a href="register.jsp"   
class="registerbutton">Register</a>
<br><br>
</div>
</div>

<jsp:include page="/template/footer.jsp" />

登录操作:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;

import oracle.jdbc.OracleDriver;

import com.opensymphony.xwork2.ActionSupport;


public class LoginAction extends ActionSupport{
private static final long serialVersionUID = 1L;

private String username;
private String password;
private String userid;
private String userpwd;
Connection conn = null;


public void setUsername(String username) {
     this.username = username;
}
public String getUsername() {
     return username;
}

public void setPassword(String password) {
     this.password = password;
}
public String getPassword() {
    return password;
}


@Action(value="loginaction", results={
        @Result(name="success", location="/welcome.jsp"),
        @Result(name="error", location="/login.jsp")})
public String execute() {
  String usr = "admin";
  String pwd = "pwd123";
  String ret = ERROR;

  try {
     String url = "jdbc:oracle:thin:@localhost:1521:xe";
     OracleDriver driver = new OracleDriver();
     DriverManager.registerDriver(driver);
     Connection conn = DriverManager.getConnection(url,usr,pwd);
     String sql = "SELECT username,password FROM usermanagement WHERE";
     sql+=" username = ? AND password = ?";
     PreparedStatement pstmt = conn.prepareStatement(sql);
     pstmt.setString(1, username);
     pstmt.setString(2, password);
     ResultSet rs = pstmt.executeQuery();

     while (rs.next()) {
         userid = rs.getString(1); 
         userpwd = rs.getString(2); 
         if (username.equals(userid) && password.equals(userpwd))
         ret = SUCCESS; 
      }
   } catch (Exception e) {
          addActionError("Invalid Username/Password"); 
       ret = ERROR;
   } finally {
      if (conn != null) {
         try {
            conn.close();
         } catch (Exception e) {
         }
      }
   }
   return ret;
}
}

最佳答案

更改您的代码。

 ............. 
 if(rs.next()) 
   {
         return SUCCESS; //the return atatement should be here. otherwise other statements should be evaluated.
   }
   else
   {
       addActionError("Invalid Username/Password"); 
       return ERROR;//here also
   }     
   } catch (Exception e) {
       e.printStackTrace();
       return ERROR;
   }

因为您的查询中有 where 子句。因此需要 while 和再次 if

如果您遇到任何错误,请发布堆栈跟踪。

关于java - Struts 数据库登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32683471/

相关文章:

mysql - servlet 数据库连接

java - 我的数组没有在 while 循环之外保留其值?

java - Java Web 应用程序中的可选数据源

java - 在 Spring/Hibernate 环境中手动管理数据库事务

mysql - 如何使用联接从两个表创建一个 View ,以显示另一个表的 COUNT?

javascript - 带有单选按钮的 Jquery 弹出窗口

java - 关于线程安全代码的问题

java - Eclipse - 如何向 "New"菜单中的 "File"部分贡献操作?

database - 如何像在dolphindb中一样在clickhouse中实现 `pivot`

java - Apache Tomcat 启动时找不到 JDK 或 JRE