From 84065e26ca4555e63a922bb29b13b0a1c86b7654 Mon Sep 17 00:00:00 2001 From: Mark Thomas Date: Mon, 2 Dec 2024 18:09:44 +0000 Subject: [PATCH] Add a limit of 10 attributes per session to the session example --- webapps/docs/changelog.xml | 4 + .../WEB-INF/classes/SessionExample.java | 94 ++++++++++++------- 2 files changed, 64 insertions(+), 34 deletions(-) diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 8d3b6900f6fb..84effc445c78 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -254,6 +254,10 @@ Examples. Add the ability to delete session attributes in the servlet session example. (markt) + + Examples. Add a hard coded limit of 10 attributes per session for the + servlet session example. (markt) + diff --git a/webapps/examples/WEB-INF/classes/SessionExample.java b/webapps/examples/WEB-INF/classes/SessionExample.java index b3de2f866956..60eaa2e03e4b 100644 --- a/webapps/examples/WEB-INF/classes/SessionExample.java +++ b/webapps/examples/WEB-INF/classes/SessionExample.java @@ -41,6 +41,9 @@ public class SessionExample extends HttpServlet { private static final long serialVersionUID = 1L; + private static final int SESSION_ATTRIBUTE_COUNT_LIMIT = 10; + + @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ResourceBundle rb = ResourceBundle.getBundle("LocalStrings", request.getLocale()); @@ -76,15 +79,34 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro out.println(rb.getString("sessions.lastaccessed") + " "); out.println(new Date(session.getLastAccessedTime())); + // Count the existing attributes + int sessionAttributeCount = 0; + Enumeration names = session.getAttributeNames(); + while (names.hasMoreElements()) { + names.nextElement(); + sessionAttributeCount++; + } + String dataName = request.getParameter("dataname"); String dataValue = request.getParameter("datavalue"); if (dataName != null) { - session.setAttribute(dataName, dataValue); + if (dataValue == null) { + session.removeAttribute(dataName); + sessionAttributeCount--; + } else if (sessionAttributeCount < SESSION_ATTRIBUTE_COUNT_LIMIT) { + session.setAttribute(dataName, dataValue); + sessionAttributeCount++; + } else { + out.print("

Session attribute ["); + out.print(HTMLFilter.filter(dataName)); + out.print("] not added as there are already "+ SESSION_ATTRIBUTE_COUNT_LIMIT + " attributes in the "); + out.println("session. Delete an attribute before adding another."); + } } - out.println("

"); + out.println("

"); out.println(rb.getString("sessions.data") + "
"); - Enumeration names = session.getAttributeNames(); + names = session.getAttributeNames(); while (names.hasMoreElements()) { String name = names.nextElement(); String value = session.getAttribute(name).toString(); @@ -96,37 +118,41 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro out.println("
"); } - out.println("

"); - out.print("

"); - out.println(rb.getString("sessions.dataname")); - out.println(""); - out.println("
"); - out.println(rb.getString("sessions.datavalue")); - out.println(""); - out.println("
"); - out.println(""); - out.println("
"); - - out.println("

GET based form:
"); - out.print("

"); - out.println(rb.getString("sessions.dataname")); - out.println(""); - out.println("
"); - out.println(rb.getString("sessions.datavalue")); - out.println(""); - out.println("
"); - out.println(""); - out.println("
"); - - out.print("

URL encoded "); + if (sessionAttributeCount < SESSION_ATTRIBUTE_COUNT_LIMIT) { + out.println("

"); + out.print("

"); + out.println(rb.getString("sessions.dataname")); + out.println(""); + out.println("
"); + out.println(rb.getString("sessions.datavalue")); + out.println(""); + out.println("
"); + out.println(""); + out.println("
"); + + out.println("

GET based form:
"); + out.print("

"); + out.println(rb.getString("sessions.dataname")); + out.println(""); + out.println("
"); + out.println(rb.getString("sessions.datavalue")); + out.println(""); + out.println("
"); + out.println(""); + out.println("
"); + + out.print("

URL encoded "); + } else { + out.print("

You may not add more than " + SESSION_ATTRIBUTE_COUNT_LIMIT + " attributes to this session."); + } out.println(""); out.println("");