未验证 提交 2c3d1c11 编写于 作者: sinat_25235033's avatar sinat_25235033 提交者: GitHub

feature: storage subject info in websocket session (#72)

上级 8fd46234
......@@ -115,6 +115,13 @@ public class SinglePrincipalMap implements PrincipalMap {
return singleMap == null ? Collections.emptySet() : singleMap.entrySet();
}
@Override
public String toString() {
return "SinglePrincipalMap{" +
"singleMap=" + singleMap +
'}';
}
private Map<String, Object> ensureSingleMap() {
if (this.singleMap == null) {
this.singleMap = new HashMap<>(8);
......
......@@ -68,6 +68,16 @@ public class SurenessSubjectSum implements SubjectSum {
return targetResource;
}
@Override
public String toString() {
return "SurenessSubjectSum{" +
"principal='" + principal + '\'' +
", principalMap=" + principalMap +
", roles=" + roles +
", targetResource='" + targetResource + '\'' +
'}';
}
public static Builder builder() {
return new Builder();
}
......
......@@ -34,6 +34,10 @@ public class SurenessFilterExample implements Filter {
/** logger **/
private static final Logger logger = LoggerFactory.getLogger(SurenessFilterExample.class);
private static final String UPGRADE = "Upgrade";
private static final String WEBSOCKET = "websocket";
@Override
public void init(FilterConfig filterConfig) {
logger.info("surenessFilter initialized");
......@@ -91,7 +95,11 @@ public class SurenessFilterExample implements Filter {
// if ok, doFilter and add subject in request
filterChain.doFilter(servletRequest, servletResponse);
} finally {
SurenessContextHolder.clear();
int statusCode = ((HttpServletResponse) servletResponse).getStatus();
String upgrade = ((HttpServletResponse) servletResponse).getHeader(UPGRADE);
if (statusCode != HttpStatus.SWITCHING_PROTOCOLS.value() || !WEBSOCKET.equals(upgrade)) {
SurenessContextHolder.clear();
}
}
}
......
package com.usthe.sureness.sample.bootstrap.controller;
import com.usthe.sureness.subject.SubjectSum;
import com.usthe.sureness.util.SurenessContextHolder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
......@@ -23,15 +25,27 @@ public class WebSocketEndpoint {
private static final Logger logger = LoggerFactory.getLogger(WebSocketEndpoint.class);
private static final String SUBJECT_KEY = "subject";
@OnOpen
public void onOpen(Session session) {
logger.info("webSocket: /webSocket/demo onOpen, session is : {} ", session);
// storage user info in session
try {
SubjectSum subject = SurenessContextHolder.getBindSubject();
logger.info("the login user info is {}", subject);
session.getUserProperties().put(SUBJECT_KEY, subject);
} finally {
SurenessContextHolder.clear();
}
}
@OnMessage
public void onMessage(String message, Session session) {
logger.info("webSocket: /webSocket/demo receive message: {}, the session is : {} ",
message, session);
SubjectSum subject = (SubjectSum)session.getUserProperties().get(SUBJECT_KEY);
logger.info("the message from user info is: {}", subject);
}
@OnClose
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册