# , , # , require('redis-session-php/redis-session.php'); # , # Redis. , . . tomcat-redis-session-manager # , define('REDIS_SESSION_PREFIX', ''); # Tomcat , PHP session_name('JSESSIONID'); # RedisSession::start();
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" /> <Manager className="com.radiadesign.catalina.session.RedisSessionManager" serializationStrategyClass="com.radiadesign.catalina.session.JSONSerializer"/>
package com.radiadesign.catalina.session; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.HashMap; import java.util.Enumeration; import java.util.Map; import java.io.ByteArrayOutputStream; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.util.Iterator; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; public class JSONSerializer implements Serializer { private ClassLoader loader; @Override public void setClassLoader(ClassLoader loader) { this.loader = loader; } @Override public byte[] serializeFrom(HttpSession session) throws IOException { // create map to put data here HashMap<String,Object> sessionData = new HashMap<String,Object>(); // put every attribute of session in newly created map for (Enumeration keys = session.getAttributeNames(); keys.hasMoreElements();){ String k = (String) keys.nextElement(); sessionData.put(k, session.getAttribute(k)); } // write it to byte array Gson gson = new Gson(); return gson.toJson(sessionData).getBytes(); } @Override public HttpSession deserializeInto(byte[] data, HttpSession session) throws IOException, ClassNotFoundException { RedisSession redisSession = (RedisSession) session; redisSession.setValid(true); // place data to map Gson gson = new Gson(); Type mapType = new TypeToken<HashMap<String,Object>>(){}.getType(); HashMap<String,Object> sessionData = gson.fromJson(new String(data), mapType); // place attributes to session object for (Map.Entry<String, Object> entry : sessionData.entrySet()) redisSession.setAttribute(entry.getKey(), entry.getValue()); // return filled session*/ return redisSession; } }
javac -cp /usr/share/tomcat6/lib/servlet-api.jar:/usr/share/tomcat6/lib/catalina.jar:/usr/share/tomcat6/lib/tomcat-redis-session-manager-1.2-tomcat-6.jar:/usr/share/tomcat6/lib/gson-2.2.2.jar com/radiadesign/catalina/session/JSONSerializer.java jar cf jsonserializer.0.1.jar com
import java.io.*; import javax.servlet.http.*; import javax.servlet.*; public class HelloServlet extends HttpServlet { public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { PrintWriter out = res.getWriter(); HttpSession session = req.getSession(); out.println("ID: " + session.getId()); session.setAttribute("Name", "kapitoka"); out.println("Set done"); out.println("Get result: " + session.getAttribute("Name")); out.close(); } }
Source: https://habr.com/ru/post/169241/
All Articles