Skip to content

Commit dcdf213

Browse files
authored
Merge pull request #12 from mkopylec/feature
Default application namespace
2 parents a20a430 + bbda483 commit dcdf213

File tree

9 files changed

+39
-29
lines changed

9 files changed

+39
-29
lines changed

README.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,6 @@ public class Application {
3838
}
3939
```
4040

41-
Set an HTTP session application [namespace](#namespaces) in _application.yml_ file:
42-
43-
```yaml
44-
session-couchbase:
45-
application-namespace: <application_namespace>
46-
```
47-
4841
Simply use `HttpSession` interface to control HTTP session. For example:
4942

5043
```java
@@ -101,6 +94,13 @@ The mode is useful for integration tests when you don't want to communicate with
10194

10295
## Namespaces
10396
The starter supports HTTP session namespaces.
97+
The name of the namespace can be set in _application.yml_ file:
98+
99+
```yaml
100+
session-couchbase:
101+
application-namespace: <application_namespace>
102+
```
103+
104104
Each web application in a distributed system has one application namespace under which the session attributes are stored.
105105
Every web application can also access global session attributes which are visible across the whole distributed system.
106106
Namespaces prevent conflicts in attributes names between different web applications in the system.

src/main/java/com/github/mkopylec/sessioncouchbase/configuration/SessionCouchbaseAutoConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public class SessionCouchbaseAutoConfiguration {
2828
@Bean
2929
@ConditionalOnMissingBean
3030
public MultiHttpSessionStrategy multiHttpSessionStrategy(SessionDao dao) {
31-
return new DelegatingSessionStrategy(new CookieHttpSessionStrategy(), dao, sessionCouchbase);
31+
return new DelegatingSessionStrategy(new CookieHttpSessionStrategy(), dao);
3232
}
3333

3434
@Bean

src/main/java/com/github/mkopylec/sessioncouchbase/configuration/SessionCouchbaseProperties.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class SessionCouchbaseProperties {
1919
/**
2020
* HTTP session application namespace under which session data must be stored.
2121
*/
22-
private String applicationNamespace;
22+
private String applicationNamespace = "default";
2323
/**
2424
* Properties responsible for managing principal HTTP sessions.
2525
*/

src/main/java/com/github/mkopylec/sessioncouchbase/core/CouchbaseSession.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,12 @@ public static String globalAttributeName(String attributeName) {
6464

6565
@Override
6666
public long getCreationTime() {
67-
return ((Number) globalAttributes.get(CREATION_TIME_ATTRIBUTE)).longValue();
67+
return getNumericGlobalAttributeValue(CREATION_TIME_ATTRIBUTE);
6868
}
6969

7070
@Override
7171
public long getLastAccessedTime() {
72-
return ((Number) globalAttributes.get(LAST_ACCESSED_TIME_ATTRIBUTE)).longValue();
72+
return getNumericGlobalAttributeValue(LAST_ACCESSED_TIME_ATTRIBUTE);
7373
}
7474

7575
public void setLastAccessedTime(long lastAccessedTime) {
@@ -238,4 +238,8 @@ protected String getNameFromGlobalName(String globalAttributeName) {
238238
protected boolean containsPrincipalAttribute() {
239239
return globalAttributes.containsKey(PRINCIPAL_NAME_INDEX_NAME) || namespaceAttributes.containsKey(PRINCIPAL_NAME_INDEX_NAME);
240240
}
241+
242+
protected long getNumericGlobalAttributeValue(String attributeName) {
243+
return ((Number) globalAttributes.get(attributeName)).longValue();
244+
}
241245
}

src/main/java/com/github/mkopylec/sessioncouchbase/core/DelegatingSessionStrategy.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.github.mkopylec.sessioncouchbase.core;
22

3-
import com.github.mkopylec.sessioncouchbase.configuration.SessionCouchbaseProperties;
43
import com.github.mkopylec.sessioncouchbase.data.SessionDao;
54
import org.springframework.session.Session;
65
import org.springframework.session.web.http.CookieHttpSessionStrategy;
@@ -13,12 +12,10 @@ public class DelegatingSessionStrategy implements MultiHttpSessionStrategy {
1312

1413
protected final CookieHttpSessionStrategy sessionStrategy;
1514
protected final SessionDao dao;
16-
protected final String namespace;
1715

18-
public DelegatingSessionStrategy(CookieHttpSessionStrategy sessionStrategy, SessionDao dao, SessionCouchbaseProperties sessionCouchbase) {
16+
public DelegatingSessionStrategy(CookieHttpSessionStrategy sessionStrategy, SessionDao dao) {
1917
this.sessionStrategy = sessionStrategy;
2018
this.dao = dao;
21-
namespace = sessionCouchbase.getApplicationNamespace();
2219
}
2320

2421
@Override
@@ -38,7 +35,7 @@ public void onInvalidateSession(HttpServletRequest request, HttpServletResponse
3835

3936
@Override
4037
public HttpServletRequest wrapRequest(HttpServletRequest request, HttpServletResponse response) {
41-
RequestWrapper wrapper = new RequestWrapper(request, dao, namespace);
38+
RequestWrapper wrapper = new RequestWrapper(request, dao);
4239
return sessionStrategy.wrapRequest(wrapper, response);
4340
}
4441

src/main/java/com/github/mkopylec/sessioncouchbase/core/RequestWrapper.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,16 @@ public class RequestWrapper extends HttpServletRequestWrapper {
2222
private static final Logger log = getLogger(RequestWrapper.class);
2323

2424
protected final SessionDao dao;
25-
protected final String namespace;
2625

27-
public RequestWrapper(HttpServletRequest request, SessionDao dao, String namespace) {
26+
public RequestWrapper(HttpServletRequest request, SessionDao dao) {
2827
super(request);
2928
this.dao = dao;
30-
this.namespace = namespace;
3129
}
3230

3331
@Override
3432
public String changeSessionId() {
3533
SessionDocument oldDocument = dao.findById(getRequestedSessionId());
36-
notNull(oldDocument, "Cannot change HTTP session ID, because Couchbase document with ID '" + getRequestedSessionId() + "' does not exist");
34+
notNull(oldDocument, "Cannot change HTTP session ID, because session document with ID '" + getRequestedSessionId() + "' does not exist in data storage");
3735
HttpSession oldSession = getSession(false);
3836
notNull(oldSession, "Cannot change HTTP session ID, because session with ID '" + getRequestedSessionId() + "' does not exist");
3937

src/test/groovy/com/github/mkopylec/sessioncouchbase/BasicSpec.groovy

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,6 @@ abstract class BasicSpec extends Specification {
119119
post('session/attribute', attribute, getPort())
120120
}
121121

122-
protected void setSecondSessionAttribute(Message attribute) {
123-
post('session/attribute/second', attribute, getPort())
124-
}
125-
126122
protected void setGlobalSessionAttribute(Message attribute) {
127123
post('session/attribute/global', attribute, getPort())
128124
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,27 @@
11
package com.github.mkopylec.sessioncouchbase.specification.session
22

3+
import com.github.mkopylec.sessioncouchbase.Message
34
import org.springframework.test.context.ActiveProfiles
45

6+
import static com.github.mkopylec.sessioncouchbase.assertions.Assertions.assertThat
7+
58
@ActiveProfiles('in-memory')
69
class InMemorySessionSpec extends SessionSpec {
10+
11+
def "Should copy HTTP session attributes when session ID was changed"() {
12+
given:
13+
def message = new Message(text: 'i cannot disappear!', number: 13)
14+
setSessionAttribute message
15+
def globalMessage = new Message(text: 'i cannot disappear too!', number: 12222)
16+
setGlobalSessionAttribute globalMessage
17+
18+
when:
19+
changeSessionId()
20+
21+
then:
22+
assertThat(getSessionAttribute())
23+
.hasBody(message)
24+
assertThat(getGlobalSessionAttribute())
25+
.hasBody(globalMessage)
26+
}
727
}

src/test/java/com/github/mkopylec/sessioncouchbase/SessionController.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,6 @@ public void setAttribute(@RequestBody Message dto, HttpSession session) {
3939
session.setAttribute(SESSION_ATTRIBUTE_NAME, dto);
4040
}
4141

42-
@PostMapping("attribute/second")
43-
public void setSecondAttribute(@RequestBody Message dto, HttpSession session) {
44-
session.setAttribute(SECOND_SESSION_ATTRIBUTE_NAME, dto);
45-
}
46-
4742
@PostMapping("attribute/global")
4843
public void setGlobalAttribute(@RequestBody Message dto, HttpSession session) {
4944
session.setAttribute(globalAttributeName(SESSION_ATTRIBUTE_NAME), dto);

0 commit comments

Comments
 (0)