@@ -27,6 +27,40 @@ public interface SessionStore {
2727 /** Default session timeout in minutes. */
2828 int DEFAULT_TIMEOUT = 30 ;
2929
30+ SessionStore UNSUPPORTED =
31+ new SessionStore () {
32+
33+ @ NonNull @ Override
34+ public Session newSession (@ NonNull Context ctx ) {
35+ throw Usage .noSession ();
36+ }
37+
38+ @ Nullable @ Override
39+ public Session findSession (@ NonNull Context ctx ) {
40+ throw Usage .noSession ();
41+ }
42+
43+ @ Override
44+ public void deleteSession (@ NonNull Context ctx , @ NonNull Session session ) {
45+ throw Usage .noSession ();
46+ }
47+
48+ @ Override
49+ public void touchSession (@ NonNull Context ctx , @ NonNull Session session ) {
50+ throw Usage .noSession ();
51+ }
52+
53+ @ Override
54+ public void saveSession (@ NonNull Context ctx , @ NonNull Session session ) {
55+ throw Usage .noSession ();
56+ }
57+
58+ @ Override
59+ public void renewSessionId (@ NonNull Context ctx , @ NonNull Session session ) {
60+ throw Usage .noSession ();
61+ }
62+ };
63+
3064 /**
3165 * Base class for in-memory session store.
3266 *
@@ -35,9 +69,9 @@ public interface SessionStore {
3569 */
3670 abstract class InMemory implements SessionStore {
3771 protected static class Data {
38- private Instant lastAccessedTime ;
39- private Instant creationTime ;
40- private Map hash ;
72+ private final Instant lastAccessedTime ;
73+ private final Instant creationTime ;
74+ private final Map hash ;
4175
4276 public Data (Instant creationTime , Instant lastAccessedTime , Map hash ) {
4377 this .creationTime = creationTime ;
@@ -64,12 +98,12 @@ protected InMemory(@NonNull SessionToken token) {
6498
6599 @ Override
66100 public @ NonNull Session newSession (@ NonNull Context ctx ) {
67- String sessionId = token .newToken ();
68- Data data =
101+ var sessionId = token .newToken ();
102+ var data =
69103 getOrCreate (
70104 sessionId , sid -> new Data (Instant .now (), Instant .now (), new ConcurrentHashMap ()));
71105
72- Session session = restore (ctx , sessionId , data );
106+ var session = restore (ctx , sessionId , data );
73107
74108 token .saveToken (ctx , sessionId );
75109 return session ;
@@ -78,7 +112,7 @@ protected InMemory(@NonNull SessionToken token) {
78112 /**
79113 * Session token.
80114 *
81- * @return Session token. Uses a cookie by default: {@link SessionToken#SID}.
115+ * @return Session token.
82116 */
83117 public @ NonNull SessionToken getToken () {
84118 return token ;
@@ -95,7 +129,7 @@ protected InMemory(@NonNull SessionToken token) {
95129 return this ;
96130 }
97131
98- protected abstract @ NonNull Data getOrCreate (
132+ protected abstract Data getOrCreate (
99133 @ NonNull String sessionId , @ NonNull Function <String , Data > factory );
100134
101135 protected abstract @ Nullable Data getOrNull (@ NonNull String sessionId );
@@ -105,7 +139,7 @@ protected InMemory(@NonNull SessionToken token) {
105139 protected abstract void put (@ NonNull String sessionId , @ NonNull Data data );
106140
107141 @ Override
108- public Session findSession (Context ctx ) {
142+ public @ Nullable Session findSession (@ NonNull Context ctx ) {
109143 String sessionId = token .findToken (ctx );
110144 if (sessionId == null ) {
111145 return null ;
@@ -219,48 +253,6 @@ private Session restore(Context ctx, String sessionId, Data data) {
219253 */
220254 void renewSessionId (@ NonNull Context ctx , @ NonNull Session session );
221255
222- /**
223- * Creates a cookie based session and store data in memory. Session data is not keep after
224- * restart.
225- *
226- * <p>It uses the default session cookie: {@link SessionToken#SID}.
227- *
228- * <p>- Session data is not keep after restart.
229- *
230- * @param timeout Timeout in seconds. Use <code>-1</code> for no timeout.
231- * @return Session store.
232- */
233- static @ NonNull SessionStore memory (int timeout ) {
234- return memory (SessionToken .SID , Duration .ofSeconds (timeout ));
235- }
236-
237- /**
238- * Creates a cookie based session and store data in memory. Session data is not keep after
239- * restart.
240- *
241- * <p>It uses the default session cookie: {@link SessionToken#SID}.
242- *
243- * <p>- Session expires after 30 minutes of inactivity. - Session data is not keep after restart.
244- *
245- * @return Session store.
246- */
247- static @ NonNull SessionStore memory () {
248- return memory (SessionToken .SID );
249- }
250-
251- /**
252- * Creates a cookie based session and store data in memory. Session data is not keep after
253- * restart.
254- *
255- * <p>It uses the default session cookie: {@link SessionToken#SID}.
256- *
257- * @param timeout Expires session after amount of inactivity time.
258- * @return Session store.
259- */
260- static @ NonNull SessionStore memory (@ NonNull Duration timeout ) {
261- return memory (SessionToken .SID , timeout );
262- }
263-
264256 /**
265257 * Creates a cookie based session and store data in memory.
266258 *
@@ -313,25 +305,12 @@ private Session restore(Context ctx, String sessionId, Data data) {
313305 *
314306 * <p>See {@link Cookie#sign(String, String)} and {@link Cookie#unsign(String, String)}.
315307 *
316- * @param secret Secret token to signed data.
317- * @return A browser session store.
318- */
319- static @ NonNull SessionStore signed (@ NonNull String secret ) {
320- return signed (secret , SessionToken .SID );
321- }
322-
323- /**
324- * Creates a session store that uses (un)signed data. Session data is signed it using <code>
325- * HMAC_SHA256</code>.
326- *
327- * <p>See {@link Cookie#sign(String, String)} and {@link Cookie#unsign(String, String)}.
328- *
329- * @param secret Secret token to signed data.
330308 * @param cookie Cookie to use.
309+ * @param secret Secret token to signed data.
331310 * @return A browser session store.
332311 */
333- static @ NonNull SessionStore signed (@ NonNull String secret , @ NonNull Cookie cookie ) {
334- return signed (secret , SessionToken .signedCookie (cookie ));
312+ static @ NonNull SessionStore signed (@ NonNull Cookie cookie , @ NonNull String secret ) {
313+ return signed (SessionToken .signedCookie (cookie ), secret );
335314 }
336315
337316 /**
@@ -340,11 +319,11 @@ private Session restore(Context ctx, String sessionId, Data data) {
340319 *
341320 * <p>See {@link Cookie#sign(String, String)} and {@link Cookie#unsign(String, String)}.
342321 *
343- * @param secret Secret token to signed data.
344322 * @param token Session token to use.
323+ * @param secret Secret token to signed data.
345324 * @return A browser session store.
346325 */
347- static @ NonNull SessionStore signed (@ NonNull String secret , @ NonNull SessionToken token ) {
326+ static @ NonNull SessionStore signed (@ NonNull SessionToken token , @ NonNull String secret ) {
348327 SneakyThrows .Function <String , Map <String , String >> decoder =
349328 value -> {
350329 String unsign = Cookie .unsign (value , secret );
0 commit comments