반응형
1). Servlet-context.xml 에 Interceptor 및 Handler Bean 등록
핸들러와 Interceptor를 등록해준다.
<!-- 웹소켓 요청 -->
<!-- 핸들러 등록 -->
<websocket:handlers allowed-origins="*">
<websocket:mapping path="/socketChannel" handler="manageChannelHandler"/>
<websocket:handshake-interceptors>
<beans:bean class="com.test.spring.interceptor.WebSocketHandShakeInterceptor"/>
</websocket:handshake-interceptors>
</websocket:handlers>
<beans:bean id="manageChannelHandler" class="com.test.socket.ManageSocketHandler"/>
2). HttpSessionHandShakeInterceptor Override 작성 => WebSocketHandShakeInterceptor.java
Interceptor로 우리는 HttpSession을 이용하려고한다.
Handler로 넘겨서 사용할 데이터는 별도로 attributes에 담아서 넘겨줘도 되니 확인!
public class WebSocketHandShakeInterceptor extends HttpSessionHandshakeInterceptor {
/**
* @desc 웹소켓 핸드쉐이크 전 호출 메소드
*/
@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
Map<String, Object> attributes) throws Exception {
// TODO Auto-generated method stub
if (request instanceof ServletServerHttpRequest) {
ServletServerHttpRequest servletServerRequest = (ServletServerHttpRequest) request;
HttpServletRequest servletRequest = servletServerRequest.getServletRequest();
HashMap<String,String> queryMap = StringTool.getQueryMap(servletRequest.getQueryString());
String deviceVariety = queryMap.get("deviceVariety");
String token = queryMap.get("sid");
int companyId =0;
String clientMacAddress = "";
if(!deviceVariety.equals(Constant.DEVICE_WEB)) {
companyId = Integer.parseInt(queryMap.get("companyId"));
clientMacAddress = queryMap.get("clientMacAddress");
}
//관리자 브라우저 일때
if(deviceVariety.equals(Constant.DEVICE_WEB)) {
if(StringUtils.isEmpty(token)) {
return false;
}
//로그인 된 회원 여부 체크 코드
//로그인 처리 되어 있는 경우에 세션아이디 어트리뷰트를 넣어줌.
//필요 정보 넘겨주기 => 핸들러로
attributes.put("deviceVariety", deviceVariety);
attributes.put("sid", token);
return super.beforeHandshake(request, response, wsHandler, attributes);
}
}
/**
* @desc 웹소켓 핸드쉐이크 후 호출 메소드
*/
@Override
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
Exception ex) {
// TODO Auto-generated method stub
super.afterHandshake(request, response, wsHandler, ex);
}
}
반응형
'WebSocket' 카테고리의 다른 글
[WebSocket] WebSocket Channeling(채널링) Java-Spring (0) | 2020.12.30 |
---|---|
[WebSocket] Simple한 WebSocket Server구축하기-SPRING BOOT (0) | 2020.12.29 |
[WebSocket] Websocket 파라미터 전달하기(Custom Header관련) (0) | 2020.12.29 |
[WebSocket] WebSocket이란? (0) | 2020.12.29 |