2014-07-05 53 views
0

我有登錄表單index.jsplogin servlet。如果用戶名和密碼正確,則取決於權限打開三個.jsp頁面中的一個(admin.jsp, user1.jsp, user2.jsp)。在用戶打開的.jsp頁面用戶名顯示爲(${User.username})。我也有bean「用戶」,它存儲用戶數據。如何從jsp獲取值到servlet並進行mysql查詢

登錄的servlet

public class Login extends HttpServlet { 
@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    PrintWriter out = response.getWriter(); 
    String username = request.getParameter("username"); 
    String password = request.getParameter("password"); 
    User user = new User(); 
    user.setUsername(username); 
    user.setPassword(password); 

    try { 
     HttpSession session = request.getSession(true); 
     Class.forName("com.mysql.jdbc.Driver"); 
     Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database","root",""); 
     Statement stm = conn.createStatement(); 
     if(!(username.equals("")) && !(password.equals(""))){ 
      String query = "SELECT * FROM users WHERE username='"+username+"' AND password='"+password+"'"; 
      ResultSet res = stm.executeQuery(upit); 
      if(res.next()){ 
       String username = res.getString(2); 
       int privileges = res.getInt(9); 
       int active = res.getInt(10); 
       user.setUsername(username); 
       user.setPrivileges(privileges); 
       user.setActive(active); 

       sesija.setAttribute("user", user); 
       if(privileges==1 && active==1){ 
        RequestDispatcher r = request.getRequestDispatcher("/admin.jsp"); 
        r.forward(request, response); 
       } 
       ......rest of the code 

    }catch(Exception e){ 
    out.println(e);} 
} 

admin.jsp我行:

<div id="topMenu>${user.username} | <a href="Logout">Logout</a></div> 

豆 「用戶」

public class User { 

private String username; 
private int privileges; 
private int active; 



public String getUsername() { 
    return username; 
} 
public void setUsername(String username) { 
    this.username = username; 
} 
public int getPrivileges() { 
    return privileges; 
} 
public void setPrivileges(int privileges) { 
    this.privileges = privileges; 
} 

public int getActive() { 
    return active; 
} 
public void setActive(int active) { 
    this.active = active; 
} 


} 

用戶具有搜索產品的可能性一世n按照他的特權數據庫。在他點擊搜索按鈕後,我想檢索他的用戶名並用於在新的servlet中進行數據庫查詢。當我手動將用戶的用戶名用servlet代碼(在sql查詢語句中)用於代碼檢查時,一切工作正常並生成結果,但當用戶點擊搜索按鈕時,我有問題自動獲取值。

在此先感謝

回答

0

您應該簡單地存儲用戶名(或者更確切地說,它的唯一的ID),在HTTP會話中,一旦它的認證。這樣,對於每個請求來服務器,你知道哪些用戶正在發送它:

if (res.next()) { 
    String username = res.getString(2); 
    request.getSession().setAttribute("authenticatedUserName", username); 

每一次你需要獲得當前認證的用戶:

String authenticatedUserName = 
    (String) request.getSession().getAttribute("authenticatedUserName"); 

邊注:學會使用prepared statements。你的代碼對於SQL注入攻擊是容易發生的,並且只要用戶在其名字或密碼中有單引號就會中斷。另外,當你真正想要的是一個布爾值(active,例如,應該是一個布爾值)時,不要使用int。

相關問題