-
Notifications
You must be signed in to change notification settings - Fork 7
/
SessionController.java
124 lines (102 loc) · 4.38 KB
/
SessionController.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package com.github.mkopylec.sessioncouchbase;
import com.github.mkopylec.sessioncouchbase.core.CouchbaseSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.session.FindByIndexNameSessionRepository;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static com.github.mkopylec.sessioncouchbase.core.CouchbaseSession.globalAttributeName;
import static java.util.Collections.list;
import static org.springframework.session.FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME;
@RestController
@RequestMapping("session")
public class SessionController {
public static final String PRINCIPAL_NAME = "user";
private static final String SESSION_ATTRIBUTE_NAME = "attribute";
private static final String SECOND_SESSION_ATTRIBUTE_NAME = "attribute2";
@Autowired(required = false)
private SessionScopedBean sessionBean;
@Autowired(required = false)
private FindByIndexNameSessionRepository<CouchbaseSession> sessionRepository;
@PostMapping("attribute")
public void setAttribute(@RequestBody Message dto, HttpSession session) {
session.setAttribute(SESSION_ATTRIBUTE_NAME, dto);
}
@PostMapping("attribute/global")
public void setGlobalAttribute(@RequestBody Message dto, HttpSession session) {
session.setAttribute(globalAttributeName(SESSION_ATTRIBUTE_NAME), dto);
}
@GetMapping("attribute")
public Object getAttribute(HttpSession session) {
return session.getAttribute(SESSION_ATTRIBUTE_NAME);
}
@GetMapping("attribute/second")
public Object getSecondAttribute(HttpSession session) {
return session.getAttribute(SECOND_SESSION_ATTRIBUTE_NAME);
}
@GetMapping("attribute/global")
public Object getGlobalAttribute(HttpSession session) {
return session.getAttribute(globalAttributeName(SESSION_ATTRIBUTE_NAME));
}
@DeleteMapping("attribute")
public void deleteAttribute(HttpSession session) {
session.removeAttribute(SESSION_ATTRIBUTE_NAME);
}
@DeleteMapping("attribute/global")
public void deleteGlobalAttribute(HttpSession session) {
session.removeAttribute(globalAttributeName(SESSION_ATTRIBUTE_NAME));
}
@PutMapping("attribute")
public void setAndRemoveAttributes(@RequestBody Message dto, HttpSession session) {
session.setAttribute(SECOND_SESSION_ATTRIBUTE_NAME, dto);
session.removeAttribute(SESSION_ATTRIBUTE_NAME);
}
@PostMapping("bean")
public void setBean(@RequestBody Message dto) {
sessionBean.setText(dto.getText());
sessionBean.setNumber(dto.getNumber());
}
@GetMapping("bean")
public Message getBean() {
Message message = new Message();
message.setText(sessionBean.getText());
message.setNumber(sessionBean.getNumber());
return message;
}
@DeleteMapping
public void invalidateSession(HttpSession session) {
session.invalidate();
}
@PutMapping("id")
public void changeSessionId(HttpServletRequest request) {
request.changeSessionId();
}
@PostMapping("principal")
public String setPrincipalAttribute(HttpSession session) {
session.setAttribute(PRINCIPAL_NAME_INDEX_NAME, PRINCIPAL_NAME);
return session.getId();
}
@GetMapping("principal")
public Set<String> getPrincipalSessions() {
Map<String, CouchbaseSession> sessionsById = sessionRepository.findByIndexNameAndIndexValue(PRINCIPAL_NAME_INDEX_NAME, PRINCIPAL_NAME);
return sessionsById.keySet();
}
@GetMapping("attribute/names")
public List<String> getAttributeNames(HttpSession session) {
return list(session.getAttributeNames());
}
@GetMapping("id")
public String getSessionId(HttpServletRequest request) {
HttpSession session = request.getSession(false);
return session != null ? session.getId() : null;
}
}