From 48467740fa3144b073f9b679c3a9764f75e206b1 Mon Sep 17 00:00:00 2001
From: nidapeng <jp@doumee.com>
Date: 星期五, 26 四月 2024 18:25:04 +0800
Subject: [PATCH] 最新版本
---
server/system_service/src/main/java/com/doumee/core/utils/Constants.java | 3
server/meeting/meeting_web/src/main/java/com/doumee/api/web/RoomsApi.java | 21 ---
server/system_service/src/main/java/com/doumee/config/cloudfilter/CloudWebConfig.java | 18 ++
server/meeting/meeting_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java | 4
server/startsh/admin_start.sh | 2
server/system_gateway/src/main/resources/bootstrap.yml | 1
server/meeting/meeting_web/src/main/java/com/doumee/api/web/NoticeApi.java | 4
server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudBookingsController.java | 10 +
server/meeting/meeting_web/src/main/java/com/doumee/api/web/MeetingApi.java | 8 -
server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CloudCarsController.java | 13 +
server/system_gateway/src/main/java/com/doumee/config/swagger/CustomWebFilterConfig.java | 83 +++++++++++
server/visits/dmvisit_web/src/main/java/com/doumee/api/web/InternalController.java | 12 -
server/system_service/src/main/java/com/doumee/config/cloudfilter/LoginHandlerInterceptor.java | 62 ++++++++
server/system_service/src/main/java/com/doumee/config/annotation/LoginNoRequired.java | 10 +
server/system_gateway/src/main/java/com/doumee/config/GatewayFilterProperties.java | 14 ++
server/system_gateway/src/main/java/com/doumee/config/GlobalFilterConfig.java | 86 ++++++++++++
server/system_gateway/src/main/java/com/doumee/config/GlobalErrorFilter.java | 1
server/system_gateway/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java | 7
server/visits/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java | 1
server/system_gateway/src/main/java/com/doumee/api/meeting/CloudBookingsController.java | 3
server/system_gateway/src/main/resources/application.yml | 7 +
server/system_gateway/src/main/java/com/doumee/api/JwtAuthController.java | 8
22 files changed, 317 insertions(+), 61 deletions(-)
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudBookingsController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudBookingsController.java
index 13c076a..9195561 100644
--- a/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudBookingsController.java
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudBookingsController.java
@@ -4,6 +4,7 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.doumee.api.BaseController;
+import com.doumee.config.annotation.LoginNoRequired;
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.model.ApiResponse;
@@ -46,7 +47,7 @@
*/
@Api(tags = "浼氳瀹ら瀹氫俊鎭〃")
@RestController
-@RequestMapping("/cloud/bookings")
+@RequestMapping("/cloudService/bookings")
public class CloudBookingsController extends BaseController {
@Autowired
@@ -57,6 +58,13 @@
public ApiResponse test() {
return ApiResponse.success("浼氳瀹ゆ祴璇曟垚鍔�");
}
+
+ @LoginNoRequired
+ @ApiOperation("娴嬭瘯缃戠")
+ @GetMapping("/testNoLogin")
+ public ApiResponse testNoLogin() {
+ return ApiResponse.success("浼氳瀹ょ鐞嗘祴璇曟棤闇�鐧诲綍鎴愬姛");
+ }
@PreventRepeat
@ApiOperation("鏂板缓")
@PostMapping("/create")
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java b/server/meeting/meeting_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java
index 7abd7c7..70ad1ce 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java
@@ -8,7 +8,6 @@
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.method.HandlerMethod;
@@ -18,9 +17,8 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import java.lang.reflect.Method;
-@Configuration
+//@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
diff --git a/server/meeting/meeting_web/src/main/java/com/doumee/api/web/MeetingApi.java b/server/meeting/meeting_web/src/main/java/com/doumee/api/web/MeetingApi.java
index a0070b2..862878c 100644
--- a/server/meeting/meeting_web/src/main/java/com/doumee/api/web/MeetingApi.java
+++ b/server/meeting/meeting_web/src/main/java/com/doumee/api/web/MeetingApi.java
@@ -2,7 +2,6 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.doumee.config.Jwt.JwtTokenUtil;
-import com.doumee.config.annotation.LoginRequired;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageWrap;
@@ -11,11 +10,9 @@
import com.doumee.dao.business.model.Bookings;
import com.doumee.dao.web.request.BookingsRequest;
import com.doumee.dao.web.request.MeetingPageRequest;
-import com.doumee.dao.web.request.UserPageRequest;
import com.doumee.dao.web.response.MeetingDetailResponse;
import com.doumee.dao.web.response.MeetingListResponse;
import com.doumee.dao.web.response.MonthDataResponse;
-import com.doumee.dao.web.response.UserResponse;
import com.doumee.service.business.BookingsService;
import com.doumee.service.system.SystemUserService;
import io.swagger.annotations.Api;
@@ -52,7 +49,6 @@
private SystemUserService systemUserService;
- @LoginRequired
@ApiOperation(value = "褰撴湀浼氳琛�", notes = "褰撴湀浼氳琛�")
@GetMapping("/monthMeeting")
@ApiImplicitParams({
@@ -73,7 +69,6 @@
return ApiResponse.success("鏌ヨ鎴愬姛",monthDataResponseList);
}
- @LoginRequired
@ApiOperation("鎴戠殑浼氳鍒楄〃")
@PostMapping("/myMeetingPage")
@ApiImplicitParams({
@@ -97,7 +92,6 @@
}
- @LoginRequired
@ApiOperation("鑾峰彇浼氳寮�闂ㄤ簩缁寸爜")
@GetMapping("/getQrCode")
@ApiImplicitParams({
@@ -137,7 +131,6 @@
*/
- @LoginRequired
@ApiOperation("浼氳棰勭害")
@PostMapping("/reservationMeeting")
@ApiImplicitParams({
@@ -149,7 +142,6 @@
return ApiResponse.success("鎿嶄綔鎴愬姛",bookingsService.reservationMeeting(bookingsRequest));
}
- @LoginRequired
@ApiOperation("鍙栨秷浼氳棰勭害")
@GetMapping("/reservationCancel")
@ApiImplicitParams({
diff --git a/server/meeting/meeting_web/src/main/java/com/doumee/api/web/NoticeApi.java b/server/meeting/meeting_web/src/main/java/com/doumee/api/web/NoticeApi.java
index 1d080df..a3ce84f 100644
--- a/server/meeting/meeting_web/src/main/java/com/doumee/api/web/NoticeApi.java
+++ b/server/meeting/meeting_web/src/main/java/com/doumee/api/web/NoticeApi.java
@@ -1,6 +1,5 @@
package com.doumee.api.web;
-import com.doumee.config.annotation.LoginRequired;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageData;
@@ -16,7 +15,6 @@
@Api(tags = "娑堟伅閫氱煡淇′笟鍔�")
@Trace(exclude = true)
-@LoginRequired
@RestController
@RequestMapping("/web/notice")
@Slf4j
@@ -31,7 +29,6 @@
* @param pageWrap
* @return
*/
- @LoginRequired
@ApiOperation(value = "鏌ヨ鐢ㄦ埛閫氱煡", notes = "灏忕▼搴忕")
@PostMapping("/findNoticePage")
public ApiResponse<PageData<Notices>> findNoticePage(@RequestBody PageWrap<Notices> pageWrap){
@@ -57,7 +54,6 @@
}
- @LoginRequired
@ApiOperation(value = "鏌ヨ閫氱煡璇︽儏", notes = "灏忕▼搴忕")
@GetMapping("/getNoticeDetail")
public ApiResponse<Notices> getNoticeDetail(@RequestParam Integer id){
diff --git a/server/meeting/meeting_web/src/main/java/com/doumee/api/web/RoomsApi.java b/server/meeting/meeting_web/src/main/java/com/doumee/api/web/RoomsApi.java
index 7205057..51d8af0 100644
--- a/server/meeting/meeting_web/src/main/java/com/doumee/api/web/RoomsApi.java
+++ b/server/meeting/meeting_web/src/main/java/com/doumee/api/web/RoomsApi.java
@@ -2,42 +2,26 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.doumee.config.Jwt.JwtTokenUtil;
-import com.doumee.config.Jwt.WebMvcConfig;
-import com.doumee.config.annotation.LoginRequired;
import com.doumee.core.annotation.trace.Trace;
-import com.doumee.core.constants.ResponseStatus;
-import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageWrap;
-import com.doumee.core.utils.Constants;
-import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.QrCodeUtils;
-import com.doumee.dao.business.model.Bookings;
import com.doumee.dao.business.model.RoomTime;
-import com.doumee.dao.web.request.MeetingPageRequest;
import com.doumee.dao.web.request.RoomTimeRequest;
import com.doumee.dao.web.request.RoomsRequest;
-import com.doumee.dao.web.request.UserPageRequest;
import com.doumee.dao.web.response.*;
-import com.doumee.service.business.BookingsService;
import com.doumee.service.business.RoomTimeService;
import com.doumee.service.business.RoomsService;
-import com.doumee.service.system.SystemUserService;
-import io.jsonwebtoken.JwtException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
-import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
-import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
import java.util.List;
-import java.util.stream.Collectors;
/**
* Created by IntelliJ IDEA.
@@ -59,7 +43,6 @@
@Autowired
private RoomTimeService roomTimeService;
- @LoginRequired
@ApiOperation("鑾峰彇浼氳瀹ゅ紑闂ㄤ簩缁寸爜")
@GetMapping("/getQrCode")
@ApiImplicitParams({
@@ -85,7 +68,6 @@
}
- @LoginRequired
@ApiOperation("浼氳瀹ゅ垪琛�")
@GetMapping("/roomsList")
@ApiImplicitParams({
@@ -96,7 +78,6 @@
}
- @LoginRequired
@ApiOperation("浼氳瀹ゆ椂闂村紑鏀惧垪琛�")
@PostMapping("/getRoomUseTime")
@ApiImplicitParams({
@@ -106,7 +87,6 @@
return ApiResponse.success("鏌ヨ鎴愬姛",roomTimeService.getRoomUseTime(roomTimeRequest));
}
- @LoginRequired
@ApiOperation("鎴戠殑浼氳瀹ゅ垪琛�")
@PostMapping("/myRoomsPage")
@ApiImplicitParams({
@@ -119,7 +99,6 @@
}
- @LoginRequired
@ApiOperation("浼氳瀹よ鎯�")
@GetMapping("/getRoomDetail")
@ApiImplicitParams({
diff --git a/server/startsh/admin_start.sh b/server/startsh/admin_start.sh
index 5aa90d6..8e5d3ad 100644
--- a/server/startsh/admin_start.sh
+++ b/server/startsh/admin_start.sh
@@ -6,4 +6,4 @@
log_file_path="/usr/local/jars/log/admin/info.log"
log_file_error_path="/usr/local/jars/log/admin/error.log"
-nohup java -Xms512m -Xmx512m -Xmn512m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=10031 -jar /usr/local/jars/admin_interface.jar >"${log_file_path}" 2>"${log_file_error_path}" &
+nohup java -Xms2048m -Xmx2048m -Xmn2048m -XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=1024m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=10031 -jar /usr/local/jars/admin_interface.jar >"${log_file_path}" 2>"${log_file_error_path}" &
diff --git a/server/system_gateway/src/main/java/com/doumee/api/JwtAuthController.java b/server/system_gateway/src/main/java/com/doumee/api/JwtAuthController.java
index 085f6e9..418e6f7 100644
--- a/server/system_gateway/src/main/java/com/doumee/api/JwtAuthController.java
+++ b/server/system_gateway/src/main/java/com/doumee/api/JwtAuthController.java
@@ -1,5 +1,6 @@
package com.doumee.api;
+import com.doumee.config.annotation.LoginNoRequired;
import com.doumee.config.jwt.JwtProperties;
import com.doumee.config.jwt.JwtTokenUtil;
import com.doumee.core.annotation.pr.PreventRepeat;
@@ -7,10 +8,12 @@
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.utils.Constants;
import com.doumee.dao.system.dto.LoginDTO;
import com.doumee.service.system.SystemLoginService;
import com.doumee.service.system.SystemUserService;
import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.server.reactive.ServerHttpRequest;
@@ -24,7 +27,7 @@
* JWT鑾峰彇浠ょ墝鍜屽埛鏂颁护鐗屾帴鍙�
*/
@RestController
-@Api("閴存潈鐧诲綍鎺ュ彛")
+@Api(tags ="閴存潈鐧诲綍鎺ュ彛")
public class JwtAuthController {
@Resource
@@ -40,6 +43,7 @@
@PreventRepeat(limit = 10, lockTime = 10000)
@ApiOperation("鐧诲綍")
@PostMapping("/login")
+ @LoginNoRequired
public ApiResponse<String> login (@Validated @RequestBody LoginDTO dto, ServerWebExchange serverWebExchange) {
try {
ServerHttpRequest request = serverWebExchange.getRequest();
@@ -78,7 +82,7 @@
*/
@GetMapping("/getUserInfo")
@ApiOperation("鑾峰彇褰撳墠鐧婚檰鐢ㄦ埛")
- public ApiResponse<LoginUserInfo> getUserInfo(@RequestHeader("userToken") String token){
+ public ApiResponse<LoginUserInfo> getUserInfo(@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
try {
LoginUserInfo user =jwtTokenUtil.getUserInfoByToken(token);
if(user !=null){
diff --git a/server/system_gateway/src/main/java/com/doumee/api/meeting/CloudBookingsController.java b/server/system_gateway/src/main/java/com/doumee/api/meeting/CloudBookingsController.java
index fa3de84..5963a9e 100644
--- a/server/system_gateway/src/main/java/com/doumee/api/meeting/CloudBookingsController.java
+++ b/server/system_gateway/src/main/java/com/doumee/api/meeting/CloudBookingsController.java
@@ -1,6 +1,7 @@
package com.doumee.api.meeting;
import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModel;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -11,7 +12,7 @@
*/
@RestController
@RequestMapping("/gateway")
-@Api("娴嬭瘯鎺ュ彛")
+@Api(tags ="娴嬭瘯鎺ュ彛")
public class CloudBookingsController {
@GetMapping("/test")
diff --git a/server/system_gateway/src/main/java/com/doumee/config/GatewayFilterProperties.java b/server/system_gateway/src/main/java/com/doumee/config/GatewayFilterProperties.java
new file mode 100644
index 0000000..4ee4ecb
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/GatewayFilterProperties.java
@@ -0,0 +1,14 @@
+package com.doumee.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.LinkedHashSet;
+
+@Data
+@Component
+@ConfigurationProperties("gateway")
+public class GatewayFilterProperties {
+ private LinkedHashSet<String> skipLoginFilterUrls;
+}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/GlobalErrorFilter.java b/server/system_gateway/src/main/java/com/doumee/config/GlobalErrorFilter.java
index 785748a..240a55b 100644
--- a/server/system_gateway/src/main/java/com/doumee/config/GlobalErrorFilter.java
+++ b/server/system_gateway/src/main/java/com/doumee/config/GlobalErrorFilter.java
@@ -20,6 +20,7 @@
return chain.filter(exchange).onErrorResume(throwable -> {
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);
+
response.getHeaders().setContentType(MediaType.APPLICATION_JSON);
String errorMessage = "{\"message\": \"" + throwable.getMessage() + "\"}";
diff --git a/server/system_gateway/src/main/java/com/doumee/config/GlobalFilterConfig.java b/server/system_gateway/src/main/java/com/doumee/config/GlobalFilterConfig.java
new file mode 100644
index 0000000..c3e2ea9
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/GlobalFilterConfig.java
@@ -0,0 +1,86 @@
+package com.doumee.config;
+
+import com.doumee.core.utils.Constants;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.stereotype.Component;
+import org.springframework.util.AntPathMatcher;
+import org.springframework.util.PathMatcher;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
+
+import javax.annotation.Resource;
+
+@Order(1)
+@Configuration
+public class GlobalFilterConfig implements GlobalFilter {
+ @Autowired
+ private RedisTemplate<String,Object> stringRedisTemplate;
+
+ @Resource
+ private GatewayFilterProperties notAuthUrlProperties;
+
+ @Override
+ public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+ /* log.info("=================================================");
+ log.info("璁块棶鎺ュ彛涓绘満: {}", exchange.getRequest().getURI().getHost());
+ log.info("璁块棶鎺ュ彛绔彛: {}", exchange.getRequest().getURI().getPort());
+ log.info("璁块棶鎺ュ彛URL: {}", exchange.getRequest().getURI().getPath());
+ log.info("璁块棶鎺ュ彛鍙傛暟: {}", exchange.getRequest().getURI().getRawQuery());*/
+ String url =exchange.getRequest().getURI().getPath();
+ if(!shouldSkip(url)){
+ String token = exchange.getRequest().getHeaders().getFirst(Constants.HEADER_USER_TOKEN);
+ if (token == null || token.isEmpty()) {
+ return unAuthorize(exchange);
+
+ }
+ String userInfo =(String) stringRedisTemplate.opsForValue().get(Constants.REDIS_TOKEN_KEY + token);
+ if (StringUtils.isBlank(userInfo)) {
+ return unAuthorize(exchange);
+ }
+ //鎶婃柊鐨� exchange鏀惧洖鍒拌繃婊ら摼
+ ServerHttpRequest request = exchange.getRequest().mutate().header(Constants.HEADER_USER_TOKEN, token).build();
+ ServerWebExchange newExchange = exchange.mutate().request(request).build();
+ return chain.filter(newExchange);
+ }
+ return chain.filter(exchange);
+ }
+ /**
+ * 鏂规硶瀹炵幇璇存槑:涓嶉渶瑕佽繃婊ょ殑璺緞
+ * <p>
+ * // * @param currentUrl 褰撳墠璇锋眰璺緞
+ */
+ private boolean shouldSkip(String currentUrl) {
+ if(notAuthUrlProperties.getSkipLoginFilterUrls() == null || notAuthUrlProperties.getSkipLoginFilterUrls().size() ==0){
+ return false;
+ }
+ PathMatcher pathMatcher = new AntPathMatcher();
+ for (String skipPath : notAuthUrlProperties.getSkipLoginFilterUrls()) {
+ if (pathMatcher.match(skipPath, currentUrl)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ // 杩斿洖鏈櫥褰曠殑鑷畾涔夐敊璇�
+ private Mono<Void> unAuthorize(ServerWebExchange exchange) {
+ // 璁剧疆閿欒鐘舵�佺爜涓�401
+ exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
+ // 璁剧疆杩斿洖鐨勪俊鎭负JSON绫诲瀷
+ exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON);
+ // 鑷畾涔夐敊璇俊鎭�
+ String errorMsg = "{\"error\": \"" + "鐢ㄦ埛鏈櫥褰曟垨鐧诲綍瓒呮椂,璇烽噸鏂扮櫥褰�" + "\"}";
+ // 灏嗚嚜瀹氫箟閿欒鍝嶅簲鍐欏叆鍝嶅簲浣�
+ return exchange.getResponse()
+ .writeWith(Mono.just(exchange.getResponse().bufferFactory().wrap(errorMsg.getBytes())));
+ }
+}
\ No newline at end of file
diff --git a/server/system_gateway/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java b/server/system_gateway/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
index 460b974..1faef7c 100644
--- a/server/system_gateway/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
+++ b/server/system_gateway/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson.JSONObject;
import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.utils.Constants;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Autowired;
@@ -96,7 +97,7 @@
claims.setLoginDate(new Date());
refreshedToken = generateTokenDo(claims);
if(refreshedToken!=null){
- redisTemplate.delete(token);//鍒犻櫎鑰佺殑token
+ redisTemplate.delete(Constants.REDIS_TOKEN_KEY+token);//鍒犻櫎鑰佺殑token
}
} catch (Exception e) {
refreshedToken = null;
@@ -131,7 +132,7 @@
.setExpiration(expirationDate)
.signWith(SignatureAlgorithm.HS512, jwtProperties.getSecret())
.compact();
- redisTemplate.opsForValue().set(token,JSONObject.toJSONString(userInfo),jwtProperties.getExpiration(), TimeUnit.MILLISECONDS);
+ redisTemplate.opsForValue().set(Constants.REDIS_TOKEN_KEY+token,JSONObject.toJSONString(userInfo),jwtProperties.getExpiration(), TimeUnit.MILLISECONDS);
return token;
}
@@ -144,7 +145,7 @@
private LoginUserInfo getClaimsFromToken(String token) {
LoginUserInfo claims;
try {
- String userInfo = (String) redisTemplate.opsForValue().get(token);
+ String userInfo = (String) redisTemplate.opsForValue().get(Constants.REDIS_TOKEN_KEY+token);
claims = JSONObject.toJavaObject(JSONObject.parseObject(userInfo),LoginUserInfo.class);
} catch (Exception e) {
claims = null;
diff --git a/server/system_gateway/src/main/java/com/doumee/config/swagger/CustomWebFilterConfig.java b/server/system_gateway/src/main/java/com/doumee/config/swagger/CustomWebFilterConfig.java
new file mode 100644
index 0000000..7f92567
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/swagger/CustomWebFilterConfig.java
@@ -0,0 +1,83 @@
+package com.doumee.config.swagger;
+
+import com.doumee.config.GatewayFilterProperties;
+import com.doumee.core.utils.Constants;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.server.reactive.ServerHttpResponse;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.util.AntPathMatcher;
+import org.springframework.util.PathMatcher;
+import org.springframework.web.server.ServerWebExchange;
+import org.springframework.web.server.WebFilter;
+import reactor.core.publisher.Mono;
+
+import javax.annotation.Resource;
+
+@Configuration
+public class CustomWebFilterConfig {
+ @Autowired
+ private RedisTemplate<String,Object> stringRedisTemplate;
+ @Resource
+ private GatewayFilterProperties notAuthUrlProperties;
+
+ @Bean
+ public WebFilter webFilter() {
+ return (exchange, chain) -> {
+ String url =exchange.getRequest().getURI().getPath();
+ if(!shouldSkip(url)){
+ String token = exchange.getRequest().getHeaders().getFirst(Constants.HEADER_USER_TOKEN);
+ if (token == null || token.isEmpty()) {
+ return unAuthorize(exchange);
+
+ }
+ String userInfo =(String) stringRedisTemplate.opsForValue().get(Constants.REDIS_TOKEN_KEY + token);
+ if (StringUtils.isBlank(userInfo)) {
+ return unAuthorize(exchange);
+ }
+ //鎶婃柊鐨� exchange鏀惧洖鍒拌繃婊ら摼
+ ServerHttpRequest request = exchange.getRequest().mutate().header(Constants.HEADER_USER_TOKEN, token).build();
+ ServerWebExchange newExchange = exchange.mutate().request(request).build();
+ return chain.filter(newExchange);
+ }
+ return chain.filter(exchange);
+ };
+ }
+
+ /**
+ * 鏂规硶瀹炵幇璇存槑:涓嶉渶瑕佽繃婊ょ殑璺緞
+ * <p>
+ * // * @param currentUrl 褰撳墠璇锋眰璺緞
+ */
+ private boolean shouldSkip(String currentUrl) {
+ if(notAuthUrlProperties.getSkipLoginFilterUrls() == null || notAuthUrlProperties.getSkipLoginFilterUrls().size() ==0){
+ return false;
+ }
+ PathMatcher pathMatcher = new AntPathMatcher();
+ for (String skipPath : notAuthUrlProperties.getSkipLoginFilterUrls()) {
+ if (pathMatcher.match(skipPath, currentUrl)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ // 杩斿洖鏈櫥褰曠殑鑷畾涔夐敊璇�
+ private Mono<Void> unAuthorize(ServerWebExchange exchange) {
+ // 璁剧疆閿欒鐘舵�佺爜涓�401
+ exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
+ // 璁剧疆杩斿洖鐨勪俊鎭负JSON绫诲瀷
+ exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON);
+ // 鑷畾涔夐敊璇俊鎭�
+ String errorMsg = "{\"error\": \"" + "鐢ㄦ埛鏈櫥褰曟垨鐧诲綍瓒呮椂,璇烽噸鏂扮櫥褰�" + "\"}";
+ // 灏嗚嚜瀹氫箟閿欒鍝嶅簲鍐欏叆鍝嶅簲浣�
+ return exchange.getResponse()
+ .writeWith(Mono.just(exchange.getResponse().bufferFactory().wrap(errorMsg.getBytes())));
+ }
+}
+
diff --git a/server/system_gateway/src/main/resources/application.yml b/server/system_gateway/src/main/resources/application.yml
index 9407396..82b4800 100644
--- a/server/system_gateway/src/main/resources/application.yml
+++ b/server/system_gateway/src/main/resources/application.yml
@@ -90,3 +90,10 @@
timeout: PT3H #琛ㄧず12灏忔椂
+gateway:
+ skipLoginFilterUrls:
+ - /meetingAdmin/**
+ - /visitsAdmin/**
+ - /login
+ - /doc.html
+ - /v2/api-docs/**
diff --git a/server/system_gateway/src/main/resources/bootstrap.yml b/server/system_gateway/src/main/resources/bootstrap.yml
index 083a9d5..59e04cc 100644
--- a/server/system_gateway/src/main/resources/bootstrap.yml
+++ b/server/system_gateway/src/main/resources/bootstrap.yml
@@ -52,6 +52,7 @@
exposure:
include: "*"
+
knife4j:
# 鑱氬悎swagger鏂囨。
gateway:
diff --git a/server/system_service/src/main/java/com/doumee/config/annotation/LoginNoRequired.java b/server/system_service/src/main/java/com/doumee/config/annotation/LoginNoRequired.java
new file mode 100644
index 0000000..5ab3699
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/config/annotation/LoginNoRequired.java
@@ -0,0 +1,10 @@
+package com.doumee.config.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.METHOD,ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface LoginNoRequired {}
diff --git a/server/system_service/src/main/java/com/doumee/config/cloudfilter/CloudWebConfig.java b/server/system_service/src/main/java/com/doumee/config/cloudfilter/CloudWebConfig.java
new file mode 100644
index 0000000..086e792
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/config/cloudfilter/CloudWebConfig.java
@@ -0,0 +1,18 @@
+package com.doumee.config.cloudfilter;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class CloudWebConfig implements WebMvcConfigurer {
+ @Autowired
+ private RedisTemplate<String,Object> stringRedisTemplate;
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ registry.addInterceptor(new LoginHandlerInterceptor(stringRedisTemplate))
+ .addPathPatterns("/cloudService/**");
+ }
+}
\ No newline at end of file
diff --git a/server/system_service/src/main/java/com/doumee/config/cloudfilter/LoginHandlerInterceptor.java b/server/system_service/src/main/java/com/doumee/config/cloudfilter/LoginHandlerInterceptor.java
new file mode 100644
index 0000000..bc6bc2f
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/config/cloudfilter/LoginHandlerInterceptor.java
@@ -0,0 +1,62 @@
+package com.doumee.config.cloudfilter;
+
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.config.annotation.LoginNoRequired;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.utils.Constants;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class LoginHandlerInterceptor implements HandlerInterceptor {
+
+ private RedisTemplate<String,Object> stringRedisTemplate;
+
+
+ // 鐢变簬璇ョ被鏈氦缁檚pring绠$悊锛屽洜姝や笉鑳戒娇鐢ㄨ嚜鍔ㄨ閰嶇殑鏂瑰紡鑾峰彇RedisTemplate瀵硅薄
+ public LoginHandlerInterceptor(RedisTemplate<String,Object> stringRedisTemplate) {
+ this.stringRedisTemplate = stringRedisTemplate;
+ }
+
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+ HandlerMethod handlerMethod = (HandlerMethod) handler;
+ Class<?> beanType = handlerMethod.getBeanType();
+ if (!beanType.isAnnotationPresent(LoginNoRequired.class) || !handlerMethod.hasMethodAnnotation(LoginNoRequired.class)) {
+ //鑾峰彇token
+ String token = request.getHeader(Constants.HEADER_USER_TOKEN); // 浠� http 璇锋眰澶翠腑鍙栧嚭 token
+ if (StringUtils.isNotBlank(token)) {
+ checkLogin(request,response);
+ } else {
+ throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鏈櫥褰�");
+ }
+ }
+ return true;
+ }
+
+ private void checkLogin(HttpServletRequest request, HttpServletResponse response) {
+ String token = request.getHeader(Constants.HEADER_USER_TOKEN);
+ if (token == null || token.isEmpty()) {
+ throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鏈櫥褰�");
+ }
+ String userinfo =(String) stringRedisTemplate.opsForValue().get(Constants.REDIS_TOKEN_KEY + token);
+ if (StringUtils.isBlank(userinfo)) {
+ throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鏈櫥褰�");
+ }
+ LoginUserInfo user = JSONObject.toJavaObject(JSONObject.parseObject(userinfo),LoginUserInfo.class );
+ if(user ==null ){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛鐧婚檰宸插け鏁堬紝璇烽噸鏂扮櫥闄嗭紒");
+ }
+ }
+
+ // @Override
+ public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+// UserContext.removeUser();
+ }
+}
\ No newline at end of file
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
index 2c34035..22ab110 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -18,7 +18,8 @@
import java.util.regex.Pattern;
public class Constants {
-
+ public static final String HEADER_USER_TOKEN = "dm_user_token";
+ public static final String REDIS_TOKEN_KEY = "token_";
public static final String[] ALL_SPELL_LIST_FIRST = new String[]{"A", "B", "C", "D", "E", "F", "G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
public static final int ZERO = 0 ;
public static final int ONE = 1 ;
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CloudCarsController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CloudCarsController.java
index 5e48302..fc80da1 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CloudCarsController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CloudCarsController.java
@@ -1,6 +1,7 @@
package com.doumee.api.cloud;
import com.doumee.api.BaseController;
+import com.doumee.config.annotation.LoginNoRequired;
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.model.ApiResponse;
@@ -25,18 +26,24 @@
*/
@Api(tags = "杞﹁締鎺ュ彛")
@RestController
-@RequestMapping("/cloud/cars")
+@RequestMapping("/cloudService/cars")
public class CloudCarsController extends BaseController {
@Autowired
private CarsService carsService;
@Autowired
private HkSyncVehicleFromHKServiceImpl hkSyncVehicleFromHKService;
- @PreventRepeat
@ApiOperation("娴嬭瘯缃戠")
@GetMapping("/test")
public ApiResponse test() {
- return ApiResponse.success("璁垮绠$悊娴嬭瘯鎴愬姛");
+ return ApiResponse.success("璁垮绠$悊娴嬭瘯鎺堟潈鎴愬姛");
+ }
+
+ @LoginNoRequired
+ @ApiOperation("娴嬭瘯缃戠")
+ @GetMapping("/testNoLogin")
+ public ApiResponse testNoLogin() {
+ return ApiResponse.success("璁垮绠$悊娴嬭瘯鏃犻渶鐧诲綍鎴愬姛");
}
@PreventRepeat
diff --git a/server/visits/dmvisit_web/src/main/java/com/doumee/api/web/InternalController.java b/server/visits/dmvisit_web/src/main/java/com/doumee/api/web/InternalController.java
index f36f20b..f4dff7e 100644
--- a/server/visits/dmvisit_web/src/main/java/com/doumee/api/web/InternalController.java
+++ b/server/visits/dmvisit_web/src/main/java/com/doumee/api/web/InternalController.java
@@ -1,7 +1,5 @@
package com.doumee.api.web;
-import com.alibaba.fastjson.JSONObject;
-import com.doumee.config.annotation.LoginRequired;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageData;
@@ -20,12 +18,8 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-import java.util.List;
/**
* Created by IntelliJ IDEA.
@@ -57,7 +51,6 @@
return ApiResponse.success("鐧诲綍鎴愬姛",wxAuthorizeVO);
}
- @LoginRequired
@ApiOperation(value = "鍐呴儴浜哄憳棣栭〉", notes = "H5")
@GetMapping("/internalHome")
@ApiImplicitParams({
@@ -68,7 +61,6 @@
}
- @LoginRequired
@ApiOperation("浠诲姟涓績")
@PostMapping("/taskCenter")
@ApiImplicitParams({
@@ -79,7 +71,6 @@
return ApiResponse.success(visitsService.taskCenter(pageWrap));
}
- @LoginRequired
@ApiOperation("璁垮璁板綍璇︽儏")
@GetMapping("/visitDetail")
@ApiImplicitParams({
@@ -91,7 +82,6 @@
}
- @LoginRequired
@ApiOperation(value = "浜哄憳鍒嗛〉",notes = "鍙嫓璁垮唴閮ㄤ汉鍛�")
@PostMapping("/memberList")
@ApiImplicitParams({
@@ -101,7 +91,6 @@
return ApiResponse.success(memberService.getVisitedMemberList(pageWrap));
}
- @LoginRequired
@ApiOperation(value = "璁垮璁板綍鎻愪氦", notes = "鍐呴儴浜哄憳鎻愪氦")
@PostMapping("/createVisit")
@ApiImplicitParams({
@@ -112,7 +101,6 @@
return ApiResponse.success("鏌ヨ鎴愬姛", visitsService.createFk(visits,false));
}
- @LoginRequired
@ApiOperation(value = "瀹℃壒娴佽褰曞鎵�", notes = "鍐呴儴浜哄憳")
@PostMapping("/auditApprove")
@ApiImplicitParams({
diff --git a/server/visits/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java b/server/visits/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java
index 92ded6e..2a4a690 100644
--- a/server/visits/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java
+++ b/server/visits/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java
@@ -1,6 +1,5 @@
package com.doumee.api.web;
-import com.doumee.config.annotation.LoginRequired;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.utils.Constants;
--
Gitblit v1.9.3