Browse Source

1.引入redis。2.增加token校验,校验的是web工作端的token

test
wangxianzhang 3 years ago
parent
commit
ec2540e000
  1. 7
      pom.xml
  2. 40
      src/main/java/com/epmet/jmreport/aop/RequestLogAspect.java
  3. 43
      src/main/java/com/epmet/jmreport/config/JimuReportTokenService.java
  4. 17
      src/main/java/com/epmet/jmreport/config/NacosRegisterConfig.java
  5. 54
      src/main/java/com/epmet/jmreport/config/redis/JsonRedisSerializer.java
  6. 32
      src/main/java/com/epmet/jmreport/config/redis/RedisConfig.java
  7. 10
      src/main/resources/application-dev.yml
  8. 20
      src/main/resources/application-local.yml
  9. 11
      src/main/resources/application-prod.yml
  10. 10
      src/main/resources/application-test.yml
  11. 2
      src/main/resources/application.yml

7
pom.xml

@ -47,13 +47,18 @@
<dependencies> <dependencies>
<!-- https://mvnrepository.com/artifact/com.alibaba.boot/nacos-discovery-spring-boot-starter -->
<dependency> <dependency>
<groupId>com.alibaba.boot</groupId> <groupId>com.alibaba.boot</groupId>
<artifactId>nacos-discovery-spring-boot-starter</artifactId> <artifactId>nacos-discovery-spring-boot-starter</artifactId>
<version>0.2.2</version> <version>0.2.2</version>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- Lombok --> <!-- Lombok -->
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>

40
src/main/java/com/epmet/jmreport/aop/RequestLogAspect.java

@ -0,0 +1,40 @@
//package com.epmet.jmreport.aop;
//
//import com.epmet.commons.tools.aspect.BaseRequestLogAspect;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.springframework.core.annotation.Order;
//import org.springframework.stereotype.Component;
//import org.springframework.web.context.request.RequestAttributes;
//import org.springframework.web.context.request.RequestContextHolder;
//import org.springframework.web.context.request.ServletRequestAttributes;
//
//import javax.servlet.http.HttpServletRequest;
//
///**
// * 日志/异常处理切面实现,调用父类方法完成日志记录和异常处理。
// */
//@Aspect
//@Component
//@Order(0)
//public class RequestLogAspect {
//
// @Override
// @Around(value = "execution(* com...*Controller*.*(..)) ")
// public Object proceed(ProceedingJoinPoint point) throws Throwable {
// return super.proceed(point, getRequest());
// }
//
// /**
// * 获取Request对象
// *
// * @return
// */
// private HttpServletRequest getRequest() {
// RequestAttributes ra = RequestContextHolder.getRequestAttributes();
// ServletRequestAttributes sra = (ServletRequestAttributes) ra;
// return sra.getRequest();
// }
//
//}

43
src/main/java/com/epmet/jmreport/config/JimuReportTokenService.java

@ -1,13 +1,18 @@
package com.epmet.jmreport.config; package com.epmet.jmreport.config;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.modules.jmreport.api.JmReportTokenServiceI; import org.jeecg.modules.jmreport.api.JmReportTokenServiceI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.Base64;
import java.util.Map;
/** /**
* 自定义积木报表鉴权(如果不进行自定义则所有请求不做权限控制) * 自定义积木报表鉴权(如果不进行自定义则所有请求不做权限控制)
@ -15,8 +20,14 @@ import javax.servlet.http.HttpServletRequest;
* 2.自定义获取登录用户 * 2.自定义获取登录用户
*/ */
@Component @Component
@Slf4j
public class JimuReportTokenService implements JmReportTokenServiceI { public class JimuReportTokenService implements JmReportTokenServiceI {
@Autowired
private RedisTemplate redisTemplate;
public static final String tokenRedisKey = "Authorization";
/** /**
* 通过请求获取Token(前端通过?token=xxx访问预览预览会以X-Access-Token/token为header访问后台然后会调用此方法) * 通过请求获取Token(前端通过?token=xxx访问预览预览会以X-Access-Token/token为header访问后台然后会调用此方法)
* 然后请求业务后台api会以X-Access-Token/token为header访问后台 * 然后请求业务后台api会以X-Access-Token/token为header访问后台
@ -50,8 +61,30 @@ public class JimuReportTokenService implements JmReportTokenServiceI {
*/ */
@Override @Override
public Boolean verifyToken(String token) { public Boolean verifyToken(String token) {
System.out.println("---------verify-----Token---------------");
//return TokenUtils.verifyToken(token, sysBaseAPI, redisUtil); log.info("JimuReportTokenService#verifyToken :: 接收到token为:{}", token);
if (StringUtils.isBlank(token)) {
// 没有token,不样访问
return false;
}
try {
String[] parts = token.split("\\.");
byte[] jsonByte = Base64.getDecoder().decode(parts[1]);
Object userId = JSON.parseObject(new String(jsonByte)).get("userId");
HashOperations hashOperations = redisTemplate.opsForHash();
Map<String, String> values = hashOperations.entries("epmet:sys:security:user:gov:web:" + userId);
if (values.size() == 0) {
return false;
}
} catch (Exception e) {
log.error("token无法截取,格式错误");
return false;
}
return true; return true;
} }

17
src/main/java/com/epmet/jmreport/config/NacosRegisterConfig.java

@ -38,6 +38,9 @@ public class NacosRegisterConfig {
@Value("${nacos.discovery.server-addr}") @Value("${nacos.discovery.server-addr}")
private String nacosServerAddr; private String nacosServerAddr;
@Value("${nacos.discovery.enabled}")
private String enabled;
private NamingService naming; private NamingService naming;
/** /**
@ -45,6 +48,12 @@ public class NacosRegisterConfig {
*/ */
@PostConstruct @PostConstruct
public void register() { public void register() {
// 未开启nacos,则不注册
if (!Boolean.valueOf(enabled)) {
return;
}
try { try {
naming = NamingFactory.createNamingService(initProperties()); naming = NamingFactory.createNamingService(initProperties());
@ -69,11 +78,17 @@ public class NacosRegisterConfig {
return properties; return properties;
} }
/** /**s
* 关闭之前手动调用注销接口从nacos注销此实例 * 关闭之前手动调用注销接口从nacos注销此实例
*/ */
@PreDestroy @PreDestroy
public void deregister() { public void deregister() {
// 未开启nacos,则不注册
if (!Boolean.valueOf(enabled)) {
return;
}
try { try {
InetAddress localIp = findFirstNonLoopbackAddress(); InetAddress localIp = findFirstNonLoopbackAddress();
naming.deregisterInstance(serviceName, localIp.getHostAddress(), Integer.valueOf(port)); naming.deregisterInstance(serviceName, localIp.getHostAddress(), Integer.valueOf(port));

54
src/main/java/com/epmet/jmreport/config/redis/JsonRedisSerializer.java

@ -0,0 +1,54 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* https://www.renren.io
*
* 版权所有侵权必究
*/
package com.epmet.jmreport.config.redis;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.ParserConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.util.IOUtils;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
/**
* Redis序列化
*
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
public class JsonRedisSerializer<T> implements RedisSerializer<T> {
private static ParserConfig defaultRedisConfig = new ParserConfig();
static {
defaultRedisConfig.setAutoTypeSupport(true);
}
private Class<T> type;
public JsonRedisSerializer(Class<T> type) {
this.type = type;
}
@Override
public byte[] serialize(T t) throws SerializationException {
if (t == null) {
return new byte[0];
}
return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(IOUtils.UTF8);
}
@Override
public T deserialize(byte[] bytes) throws SerializationException {
if (bytes == null || bytes.length <= 0) {
return null;
}
String str = new String(bytes, IOUtils.UTF8);
return JSON.parseObject(str, type, defaultRedisConfig);
}
}

32
src/main/java/com/epmet/jmreport/config/redis/RedisConfig.java

@ -0,0 +1,32 @@
package com.epmet.jmreport.config.redis;
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;
import javax.annotation.Resource;
/**
* Redis配置
*
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
@Configuration
public class RedisConfig {
@Resource
private RedisConnectionFactory factory;
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new JsonRedisSerializer<>(Object.class));
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new JsonRedisSerializer<>(Object.class));
redisTemplate.setConnectionFactory(factory);
return redisTemplate;
}
}

10
src/main/resources/application-dev.yml

@ -9,4 +9,12 @@ mysql:
nacos: nacos:
discovery: discovery:
server-addr: 192.168.1.140:8848 server-addr: 192.168.1.140:8848
namespace: 1fecc730-5e6e-464c-aae9-7567944e7936 namespace: 1fecc730-5e6e-464c-aae9-7567944e7936
enabled: true
spring:
redis:
host: 192.168.1.140
port: 6379
database: 0
password: 123456

20
src/main/resources/application-local.yml

@ -0,0 +1,20 @@
# 项目启动的时候,会根据环境,取这个配置
mysql:
host: 192.168.1.140
port: 3306
db: epmet_jmreport
username: root
password: root
nacos:
discovery:
server-addr: 192.168.1.140:8848
namespace: 1fecc730-5e6e-464c-aae9-7567944e7936
enabled: false
spring:
redis:
host: 192.168.1.140
port: 6379
database: 0
password: 123456

11
src/main/resources/application-prod.yml

@ -9,4 +9,13 @@ mysql:
nacos: nacos:
discovery: discovery:
server-addr: 192.168.11.180:8848 server-addr: 192.168.11.180:8848
namespace: bd205d23-e696-47be-b995-916313f86e99 namespace: bd205d23-e696-47be-b995-916313f86e99
enabled: true
spring:
redis:
host: r-m5ez3n1j0qc3ykq2ut.redis.rds.aliyuncs.com
port: 6379
database: 0
password: EpmEtclOUdrEdIs!Q2w

10
src/main/resources/application-test.yml

@ -10,4 +10,12 @@ mysql:
nacos: nacos:
discovery: discovery:
server-addr: 192.168.10.150:8848 server-addr: 192.168.10.150:8848
namespace: 67e3c350-533e-4d7c-9f8f-faf1b4aa82ae namespace: 67e3c350-533e-4d7c-9f8f-faf1b4aa82ae
enabled: true
spring:
redis:
host: 192.168.10.150
port: 6379
database: 0
password: EpmEtrEdIs!q@w

2
src/main/resources/application.yml

@ -10,7 +10,7 @@ spring:
password: ${mysql.password:root} password: ${mysql.password:root}
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
profiles: profiles:
active: dev active: local
jeecg : jeecg :
# local|minio|alioss # local|minio|alioss

Loading…
Cancel
Save