4.0.0com.websocket_chatjohnson0.0.1-SNAPSHOTjohnsonDemo project for Spring Boot1.8UTF-8UTF-82.3.7.RELEASEorg.springframework.bootspring-boot-starter-thymeleaforg.springframework.bootspring-boot-starter-websocketorg.springframework.bootspring-boot-starter-testtestorg.junit.vintagejunit-vintage-engineorg.springframework.bootspring-boot-starterorg.springframework.bootspring-boot-starter-loggingorg.springframework.bootspring-boot-starter-webmysqlmysql-connector-javaorg.mybatis.spring.bootmybatis-spring-boot-starter2.1.4
// springboot 使用这个 mybatisplus
com.baomidoumybatis-plus-boot-starter3.4.2org.projectlomboklombokorg.apache.poipoi3.17com.alibabadruid1.1.20com.alibabafastjson1.2.73commons-netcommons-net3.1org.springframework.bootspring-boot-starter-log4j2junitjunittestorg.springframework.bootspring-boot-dependencies${spring-boot.version}pomimportorg.apache.maven.pluginsmaven-compiler-plugin3.8.11.81.8UTF-8org.springframework.bootspring-boot-maven-plugin2.3.7.RELEASEcom.websocket_chat.johnson.JohnsonApplicationrepackagerepackage
三、数据库准备(sql)
数据库建表并插入sql
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for staff
-- ----------------------------
DROp TABLE IF EXISTS `staff`;
CREATE TABLE `staff` (
`staff_id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
`first_name` varchar(45) CHARACTER SET utf8 NOT NULL,
`last_name` varchar(45) CHARACTER SET utf8 NOT NULL,
`address_id` smallint(5) unsigned NOT NULL,
`picture` blob,
`email` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
`store_id` tinyint(3) unsigned NOT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1',
`username` varchar(16) CHARACTER SET utf8 NOT NULL,
`password` varchar(40) COLLATE utf8_bin DEFAULT NULL,
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`staff_id`) USING BTREE,
KEY `idx_fk_store_id` (`store_id`) USING BTREE,
KEY `idx_fk_address_id` (`address_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC;
-- ----------------------------
-- Records of staff
-- ----------------------------
BEGIN;
INSERT INTO `staff` VALUES (1, 'Mike', 'Hillyer', 3, NULL, '', 1, 1, 'Mike', '81dc9bdb52d04dc20036dbd8313ed055', '2017-06-29 14:27:38');
INSERT INTO `staff` VALUES (2, 'Jon', 'Stephens', 4, NULL, '', 2, 1, 'Jon', '1234', '2017-06-29 14:27:38');
INSERT INTO `staff` VALUES (3, 'TOM', 'DSA', 3, NULL, 'DF', 1, 1, 'TOM', '1234', '2016-11-11 11:08:10');
INSERT INTO `staff` VALUES (4, 'John', 'son', 4, NULL, NULL, 1, 1, 'John', '1234', '2022-08-09 09:13:28');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
@Controller
public class ChatController {
@Autowired
private StaffService staffService;
@RequestMapping("/onlineusers")
@ResponseBody
public Set onlineUser(@RequestParam("currentuser") String currentUser) {
ConcurrentHashMap sessionPools = WebSocketService.getSessionPools();
Set set = sessionPools.keySet();
Iterator iterator = set.iterator();
HashSet nameSet = new HashSet<>();
while (iterator.hasNext()) {
String next = iterator.next();
if (!next.equals(currentUser)) {
nameSet.add(next);
}
}
return nameSet;
}
@RequestMapping("/getuid")
@ResponseBody
public User getUid(@RequestParam("username") String username){
Long uid = staffService.getUidByName(username);
return new User(uid,null);
}
}
LoginController
@Controller
public class LoginController {
@Autowired
private StaffService staffService;
@RequestMapping("/loginvalidate")
public String loginvalidate(@RequestParam("username") String username, @RequestParam("password") String password, HttpSession httpSession){
if(username==null){
return "login";
}
String realPwd = staffService.getPasswordByUsername(username);
if(realPwd!=null && realPwd.equals(password)){
Long uid = staffService.getUidByName(username);
System.out.println("登录成功:"+uid);
httpSession.setAttribute("uid",uid);
return "chatroom";
}else {
return "fail";
}
}
@RequestMapping("/login")
public String login(){
return "login";
}
@RequestMapping("/https://blog.csdn.net/qq_34272900/article/details/logout")
public String https://blog.csdn.net/qq_34272900/article/details/logout(){
return "login";
}
@GetMapping("/currentuser")
@ResponseBody
public User currentUser(HttpSession httpSession){
Long uid = (Long) httpSession.getAttribute("uid");
String username = staffService.getUsernameByStaffId(uid);
System.out.println("用户名:"+username);
return new User(uid,username);
}
}
config目录下
WebSocketConfig
@Configuration
public class WebSocketConfig {
// 自动注册使用@ServerEndPoint 注解声明的websocket endpoint
@Bean
public ServerEndpointExporter serverEndpointExporter(){
return new ServerEndpointExporter();
}
}
main 主入口
JohnsonApplication
@SpringBootApplication
@MapperScan("com.websocket_chat.johnson.mapper")
public class JohnsonApplication {
public static void main(String[] args) {
SpringApplication.run(JohnsonApplication.class, args);
}
}