У меня проблемы с поиском решения этой проблемы.
Когда пользователь входит в систему (используя мой сервлет), я хотел бы сохранить введенные им учетные данные (имя пользователя и пароль), а затем использовать эту информацию в обычном java классе.
------- Вот код сервлета входа ----
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
String enteredUserName = request.getParameter("username"); //this is the same as name value from login form
String enteredPassword = request.getParameter("password");
RequestDispatcher rd = null;
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
try (Connection conn = DriverManager.getConnection("jdbc:postgresql://127.0.0.1:xxxx/", "xxxxxx",
"xxxxxxx")) {
Statement first_stmt = null;
String first_query = "select user_name, pass_word, access_level from employees where user_name = " + "'" + enteredUserName + "';";
first_stmt = conn.createStatement();
ResultSet rs = first_stmt.executeQuery(first_query);
while (rs.next()) {
int accessLevel_db = rs.getInt("access_level");
String username_db = rs.getString("user_name");
String password_db = rs.getString("pass_word");
/*TRMSLoginDao access = new TRMSLoginDao();
//access.login(userName.toString(), password.toString());
//problem is right here accessLevel never gets updated stays at 0
if(TRMSLoginDao.login(userName, password)) {*/
if (enteredUserName.equals(username_db) && enteredPassword.equals(password_db) && accessLevel_db == 3) {
//establish session stuff
HttpSession session = request.getSession(); //create session object
session.setAttribute("username", enteredUserName); // used session to set session attribute
session.setAttribute("password", enteredPassword); // sets password attribute
//String entered_UserName = (String) session.getAttribute("username");
//establish session stuff
rd = request.getRequestDispatcher("/DistrictManagerHome.jsp");
rd.forward(request, response);
}}
Я хочу использовать сохраненное имя пользователя в этом запросе sql, как только они зашли на сайт
Как я хочу использовать текущего человека, который вошел в систему под именем пользователя в приведенном ниже sql утверждении
----------- Как видно в этом запросе -------
public void updateEmployee(Employee theEmployee) throws Exception{
Connection myConn = null;
PreparedStatement myStmt = null;
//get a connection
Class.forName("org.postgresql.Driver");
try (Connection conn = DriverManager.getConnection("jdbc:postgresql://127.0.0.1:xxxx/", "xxxxxx",
"xxxxxxx")) {
// create SQL update Statement
String sql = "update public.employees " + "set user_name=?, pass_word=?, d_o_b=?, first_name=?, last_name=?, manager_email=?, access_level=? " + "where user_name=?;";
// Prepare Statement
myStmt = conn.prepareStatement(sql);
// set params
myStmt.setString(1, theEmployee.getUserName());
myStmt.setString(2, theEmployee.getPassWord());
myStmt.setString(3, theEmployee.getDob());
myStmt.setString(4, theEmployee.getFirstName());
myStmt.setString(5, theEmployee.getLastName());
myStmt.setString(6, theEmployee.getManagerEmail());
myStmt.setString(7, theEmployee.getAccessLevel());
myStmt.setInt(8, theEmployee.getId());
// execute statement
myStmt.executeUpdate();
}
finally {
//clean up JDBC objects
close(myConn,myStmt, null);
}
}
В заключение, код в настоящее время работает так, как задумано, но я могу выбрать только * в моем исходном запросе. Я хочу делать запросы на основе учетных данных текущих пользователей. Я просто пытаюсь добавить больше функциональности, используя действительное введенное и аутентифицированное имя пользователя в коде, где это необходимо.