From 10773f4f5a0f01099a2a8a141adc8dfae2ef4fb5 Mon Sep 17 00:00:00 2001 From: chanbook <648715275@qq.com> Date: Mon, 8 Aug 2022 10:28:33 +0800 Subject: [PATCH] =?UTF-8?q?=E8=81=8A=E5=A4=A9=E5=AE=A4=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/JwtTokenAuthenticationFilter.java | 11 +++- .../chat/demo/config/WhiteListHandler.java | 6 +++ .../chat/demo/websocket/ChatRoom.java | 54 +++++++++---------- 3 files changed, 40 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/zhangshu/chat/demo/config/JwtTokenAuthenticationFilter.java b/src/main/java/com/zhangshu/chat/demo/config/JwtTokenAuthenticationFilter.java index 9868b34..8b8536c 100644 --- a/src/main/java/com/zhangshu/chat/demo/config/JwtTokenAuthenticationFilter.java +++ b/src/main/java/com/zhangshu/chat/demo/config/JwtTokenAuthenticationFilter.java @@ -1,10 +1,13 @@ package com.zhangshu.chat.demo.config; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.zhangshu.chat.demo.dto.CommonResult; import com.zhangshu.chat.demo.util.ResponseWriteUtil; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.AnonymousAuthenticationToken; import org.springframework.security.core.Authentication; +import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.filter.GenericFilterBean; @@ -36,10 +39,16 @@ public class JwtTokenAuthenticationFilter extends GenericFilterBean { SecurityContextHolder.getContext().setAuthentication(auth); } } + // 无授权 且是访问白名单 +// if (Objects.isNull(auth) && whiteListHandler.match(request)) { +// //设置游客访问 +// auth = new AnonymousAuthenticationToken(IdUtil.fastSimpleUUID(), "anonymousUser", AuthorityUtils.createAuthorityList("ROLE_ANONYMOUS")); +// SecurityContextHolder.getContext().setAuthentication(auth); +// } } catch (Exception e) { ResponseWriteUtil.write(response, CommonResult.unauthorized()); return; } - filterChain.doFilter(req, res); + filterChain.doFilter(request, response); } } diff --git a/src/main/java/com/zhangshu/chat/demo/config/WhiteListHandler.java b/src/main/java/com/zhangshu/chat/demo/config/WhiteListHandler.java index 2a8893d..f52f9a2 100644 --- a/src/main/java/com/zhangshu/chat/demo/config/WhiteListHandler.java +++ b/src/main/java/com/zhangshu/chat/demo/config/WhiteListHandler.java @@ -4,6 +4,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import javax.servlet.http.HttpServletRequest; + @Configuration public class WhiteListHandler { private final static String[] DEFAULT_WHITE_LIST = new String[]{ @@ -35,4 +37,8 @@ public class WhiteListHandler { .authenticated() .and(); } + +// public boolean match(HttpServletRequest request) { +// return matcherList.stream().anyMatch(matcher -> matcher.matches(request)); +// } } diff --git a/src/main/java/com/zhangshu/chat/demo/websocket/ChatRoom.java b/src/main/java/com/zhangshu/chat/demo/websocket/ChatRoom.java index b5eaaa7..59b879f 100644 --- a/src/main/java/com/zhangshu/chat/demo/websocket/ChatRoom.java +++ b/src/main/java/com/zhangshu/chat/demo/websocket/ChatRoom.java @@ -7,7 +7,6 @@ import cn.hutool.json.JSONUtil; import com.zhangshu.chat.demo.config.UserDetailsImpl; import com.zhangshu.chat.demo.entity.Room; import com.zhangshu.chat.demo.service.RoomCache; -import com.zhangshu.chat.demo.vo.RoomUserVo; import com.zhangshu.chat.demo.vo.UserMessageVo; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -17,7 +16,6 @@ import javax.websocket.*; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import java.io.IOException; -import java.security.Principal; import java.util.*; @Slf4j @@ -39,15 +37,15 @@ public class ChatRoom { */ @OnOpen public void onOpen(Session session, @PathParam("roomId") String roomId) { -// if (getRoomCache().createSuccess(roomId)) { -// sendRefuseConnectionMessage(session); -// return; -// } -// UserDetailsImpl userInfo = (UserDetailsImpl) session.getUserPrincipal(); -// if (Objects.isNull(userInfo) || !getRoomCache().isExistUser(userInfo.getId())) { -// sendRefuseConnectionMessage(session); -// return; -// } + if (getRoomCache().createSuccess(roomId)) { + this.sendMessage("无此房间,拒绝连接", session); + return; + } + UserDetailsImpl userInfo = (UserDetailsImpl) session.getUserPrincipal(); + if (Objects.isNull(userInfo) || !getRoomCache().isExistUser(userInfo.getId())) { + this.sendMessage("用户验证失败或者房间内无此用户,拒绝连接", session); + return; + } String sessionId = session.getId().toLowerCase(); SESSION_CACHE.put(sessionId, session); if (StringUtils.isBlank(this.roomId)) { @@ -67,24 +65,24 @@ public class ChatRoom { public void onMessage(String message, Session session) { log.info("服务端接收消息成功,消息内容:{}", message); // 处理消息,并响应给客户端 -// Room room = getRoomCache().get(this.roomId); -// if (Objects.isNull(room)) { -// return; -// } -// UserDetailsImpl userInfo = (UserDetailsImpl) session.getUserPrincipal(); -// if (Objects.isNull(userInfo)) { -// return; -// } -// UserMessageVo messageVo = UserMessageVo.builder() -// .id(userInfo.getId()) -// .nickname(userInfo.getNickname()) -// .username(userInfo.getUsername()) -// .message(message) -// .build(); - + Room room = getRoomCache().get(this.roomId); + if (Objects.isNull(room)) { + return; + } + UserDetailsImpl userInfo = (UserDetailsImpl) session.getUserPrincipal(); + if (Objects.isNull(userInfo)) { + return; + } UserMessageVo messageVo = UserMessageVo.builder() + .id(userInfo.getId()) + .nickname(userInfo.getNickName()) + .username(userInfo.getUsername()) .message(message) .build(); + +// UserMessageVo messageVo = UserMessageVo.builder() +// .message(message) +// .build(); String text = JSONUtil.toJsonStr(messageVo); ROOM_SESSION_MAP.get(roomId).stream().map(SESSION_CACHE::get).filter(Objects::nonNull) .forEach(v -> this.sendMessage(text, v)); @@ -110,10 +108,6 @@ public class ChatRoom { } - private void sendRefuseConnectionMessage(Session session) { - this.sendMessage("拒绝连接", session); - } - /** * 关闭连接 *