提交 e903a9dd 编写于 作者: Q qinxiaodong@pannk.com

websocket

上级 55b4ee0c
package com.pannk.config;
package com.pannk.ws.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
......
package com.pannk.config;
package com.pannk.ws.config;
import com.pannk.cons.Constant;
import org.springframework.amqp.core.Binding;
......
package com.pannk.config;
package com.pannk.ws.config;
import com.pannk.cons.Constant;
import org.springframework.amqp.core.Binding;
......
package com.pannk.config;
package com.pannk.ws.config;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.AuthorizationException;
......
package com.pannk.config;
package com.pannk.ws.config;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
......
package com.pannk.config;
package com.pannk.ws.config;
import com.pannk.user.entity.UserEntity;
import org.apache.shiro.authc.*;
......
package com.pannk.config;
package com.pannk.ws.config;
import org.apache.shiro.authc.AuthenticationToken;
......
package com.pannk.ws.config;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* Created by wolf on 20-11-3.
*/
@Slf4j
@Component
public class RedisUtil {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
/**
* 设置过期时间
* @param key 键
* @param time 时间,单位:秒
* @return
*/
public boolean expire(String key, long time) {
try {
if (time > 0) {
redisTemplate.expire(key, time, TimeUnit.SECONDS);
}
return true;
} catch (Exception e) {
log.error("设置失效时间出错,{}", e);
return false;
}
}
/**
* 设置过期时间
* @param key 键
* @param day 时间,单位:天
* @return
*/
public boolean expire(String key,int day){
try{
if (day<0){
redisTemplate.expire(key,day,TimeUnit.DAYS);
}
return true;
}catch (Exception e){
log.error("设置失效时间出错,{}",e);
return false;
}
}
/**
* 删除键
* @param key 键
*/
public void del(String... key){
if (key!=null && key.length>0){
if (key.length==1){
redisTemplate.delete(key[0]);
}else{
redisTemplate.delete(CollectionUtils.arrayToList(key));
}
}
}
/**
* 缓存获取
* @param key 键
* @return
*/
public Object get(String key){
return key == null ? null :redisTemplate.opsForValue().get(key);
}
/**
* 获取对象
* @param key 键
* @param cls 类
* @param <T> 类型
* @return
*/
public <T> T getEntity(String key,Class<T> cls){
Object obj = this.get(key);
if (obj!=null){
return JSON.parseObject(obj.toString(),cls);
}
return null;
}
/**
* 获取列表
* @param key 键
* @param cls 类
* @param <T> 类型
* @return
*/
public <T> List<T> getListEntity(String key, Class<T> cls){
Object obj = this.get(key);
if (obj!=null){
return JSON.parseArray(obj.toString(),cls);
}
return null;
}
/**
* 设置键值
* @param key 键
* @param value 值
* @return
*/
public boolean set(String key,Object value){
try{
redisTemplate.opsForValue().set(key,value);
return true;
}catch (Exception e){
log.error("设置键值出错,{}",e);
return false;
}
}
/**
* 设置键值和失效时间
* @param key 键
* @param value 值
* @param time 失效时间
* @return
*/
public boolean set(String key,Object value,long time){
try{
if(time>0){
redisTemplate.opsForValue().set(key,value,time, TimeUnit.SECONDS);
}else{
set(key,value);
}
return true;
}catch (Exception e){
log.error("设置键值和失效时间出错,{}",e);
return false;
}
}
/**
* 获取hash值
* @param key 键
* @param item 项
* @return
*/
public Object hget(String key,String item){
return redisTemplate.opsForHash().get(key,item);
}
/**
* 获取hashKey对应的所有键值
* @param key 键
* @return
*/
public Map<Object,Object> hmget(String key){
return redisTemplate.opsForHash().entries(key);
}
/**
* 设置hash值
* @param key 键
* @param map 值
* @return
*/
public boolean hmset(String key,Map<String,Object> map){
try{
redisTemplate.opsForHash().putAll(key,map);
return true;
}catch (Exception e){
log.error("设置哈希键值出错,{}",e);
return false;
}
}
}
package com.pannk.config;
package com.pannk.ws.config;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
......
package com.pannk.config;
package com.pannk.ws.config;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
......
package com.pannk.config;
package com.pannk.ws.config;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import org.springframework.context.annotation.Bean;
......
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springboot-demo</artifactId>
<groupId>com.pannk</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>integrate-websocket</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
</dependency>
<!-- websocket -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.pannk.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* Redis配置
*
* @author wolf
* @date 20-11-13
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate getRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate redisTemplate = new RedisTemplate();
//设置连接工厂
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置键序列化
redisTemplate.setKeySerializer(new StringRedisSerializer());
//设置值序列化
redisTemplate.setValueSerializer(new StringRedisSerializer());
return redisTemplate;
}
}
package com.pannk.ws.config;
import com.pannk.ws.interceptor.WebSocketInterceptor;
import com.pannk.ws.wshandlers.MyWebSocketHandler;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
/**
* Created by wolf on 20-12-16.
*/
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) {
webSocketHandlerRegistry.addHandler(new MyWebSocketHandler(), "/websocket/{clientId}").setAllowedOrigins("*").addInterceptors
(new WebSocketInterceptor());
}
}
package com.pannk.ws.interceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.HandshakeInterceptor;
import java.util.Map;
/**
* Created by wolf on 20-12-16.
*/
@Slf4j
public class WebSocketInterceptor implements HandshakeInterceptor {
@Override
public boolean beforeHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse,
WebSocketHandler webSocketHandler, Map<String, Object> map) throws Exception {
return false;
}
@Override
public void afterHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse,
WebSocketHandler webSocketHandler, Exception e) {
}
}
package com.pannk.ws.wshandlers;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketMessage;
import org.springframework.web.socket.WebSocketSession;
/**
* Created by wolf on 20-12-16.
*/
@Component
@Slf4j
public class MyWebSocketHandler implements WebSocketHandler {
@Override
public void afterConnectionEstablished(WebSocketSession webSocketSession) throws Exception {
}
@Override
public void handleMessage(WebSocketSession webSocketSession, WebSocketMessage<?> webSocketMessage) throws Exception {
}
@Override
public void handleTransportError(WebSocketSession webSocketSession, Throwable throwable) throws Exception {
}
@Override
public void afterConnectionClosed(WebSocketSession webSocketSession, CloseStatus closeStatus) throws Exception {
}
@Override
public boolean supportsPartialMessages() {
return false;
}
}
......@@ -22,6 +22,7 @@
<module>integrate-swagger</module>
<module>integrate-shiro</module>
<module>integrate-activiti</module>
<module>integrate-websocket</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册