Как я могу получить доступ к логину пользователя и сохранить его в переменной для использования в обычном java классе? - PullRequest
0 голосов
/ 22 апреля 2020

У меня проблемы с поиском решения этой проблемы.

Когда пользователь входит в систему (используя мой сервлет), я хотел бы сохранить введенные им учетные данные (имя пользователя и пароль), а затем использовать эту информацию в обычном 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);
    }


}

В заключение, код в настоящее время работает так, как задумано, но я могу выбрать только * в моем исходном запросе. Я хочу делать запросы на основе учетных данных текущих пользователей. Я просто пытаюсь добавить больше функциональности, используя действительное введенное и аутентифицированное имя пользователя в коде, где это необходимо.

1 Ответ

0 голосов
/ 24 апреля 2020

введите описание изображения здесь

Мне удалось получить доступ к атрибуту сеанса, как показано на этом добавленном рисунке здесь. Создав метод и передав аргументы запроса и ответа из запроса httpservlet, я смог использовать имя пользователя текущего пользователя в запросе sql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...