Маскировка имени пользователя после входа пользователя в JDBC

Итак, у меня есть код для отправки значения моего имени пользователя на мою страницу приветствия index.jsp:

response.sendRedirect("index.jsp?username=" + username);

Имя отображается на моей странице index.jsp с этим:

<%= "Welcome " + request.getParameter("username")%>

Тем не менее, URL отображает эту информацию, что я не хочу:

http://localhost:8088/Trading_Platform_Web/index.jsp?username=ClayBanks1989

Есть идеи, как это замаскировать?

Кроме того, было бы более желательно отображать имя только из моей базы данных. Но мы можем сосредоточиться на поставленной задаче.

2 ответа

Решение

Использовать диспетчеризацию запросов вместо перенаправления.

RequestDispatcher view = Request.getRequestDispatcher("index.jsp");
view.forward(request, response);

Это перенаправит тот же объект запроса в index.jsp. Если имя пользователя еще не является параметром запроса, передайте его как атрибут

request.setAttribute("username", username); // before doing the forward

и получить его в вашем index.jsp как

<%= "Welcome " + request.getAttribute("username")%>

В качестве альтернативы, так как пользователь вошел в систему (через бэкэнд-аутентификацию через JDBC, как вы заявляете), вы можете сохранить имя пользователя (и другие относящиеся к нему вещи) в HttpSession,

HttpSession session = request.getSession();
session.setAttribute("username", username);

Теперь вы можете переслать (рекомендуется) или выбрать перенаправление, как раньше, но index.jsp изменится на

<%= "Welcome " + session.getAttribute("username")%>

Используя пересылку. Это позволит передавать атрибуты запроса представлению, и вы можете использовать их в форме ServletRequest#getAttribute или с помощью языка выражений и JSTL. Краткий пример

Контроллер (ваш сервлет)

request.setAttribute(username", username);
RequestDispatcher dispatcher = servletContext().getRequestDispatcher("index.jsp");

dispatcher.forward(request, response);

Просмотр (ваш JSP).

<%
out.println(request.getAttribute("username"));
%>

Другой вариант - использование переменных сеанса:

//if request is not from HttpServletRequest, you should do a typecast before
HttpSession session = request.getSession(false);
//save message in session
session.setAttribute(username", username);
response.sendRedirect("index.jsp");

тогда верни его

<%
out.println(session.getAttribute("message"));
session.removeAttribute("message");
%>

Точно так же вы можете хранить имя в переменной сеанса из вашей базы данных и отображать его в любом месте на своем веб-сайте, пока сеанс не будет поддерживаться.

Другие вопросы по тегам