zx преди 2 седмици
родител
ревизия
3920c9406e

+ 22 - 75
fs-company/src/main/java/com/fs/company/controller/common/Test.java

@@ -4,6 +4,11 @@ import com.alibaba.fastjson.JSON;
 import com.fs.ad.enums.AdUploadType;
 import com.fs.common.annotation.DataSource;
 import com.fs.common.enums.DataSourceType;
+import com.fs.company.service.ICompanyService;
+import com.fs.company.vo.RedPacketMoneyVO;
+import com.fs.course.mapper.FsCourseRedPacketLogMapper;
+import com.fs.erp.service.IErpOrderService;
+import com.fs.his.utils.ConfigUtil;
 import com.fs.qw.vo.AdUploadVo;
 import com.fs.sop.service.IQwSopTempContentService;
 import com.fs.sop.service.IQwSopTempDayService;
@@ -11,88 +16,30 @@ import com.fs.sop.service.IQwSopTempRulesService;
 import com.fs.sop.service.IQwSopTempService;
 import lombok.AllArgsConstructor;
 import org.apache.rocketmq.spring.core.RocketMQTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 @RestController
-@AllArgsConstructor
 public class Test {
+    @Autowired
+    private ConfigUtil configUtil;
 
-    private final IQwSopTempService qwSopTempService;
-    private final IQwSopTempRulesService qwSopTempRulesService;
-    private final IQwSopTempDayService qwSopTempDayService;
-    private final IQwSopTempContentService qwSopTempContentService;
-    private final RocketMQTemplate rocketMQTemplate;
+    @Autowired
+    private FsCourseRedPacketLogMapper fsCourseRedPacketLogMapper;
+    @Autowired
+    private ICompanyService companyService;
 
-//    @GetMapping("test")
-//    public void fileDownload(){
-////        List<QwSopTempRules> rulesList = qwSopTempRulesService.listByTempId("3922c166-a539-4a64-a535-d4feafc096c3");
-//        List<QwSopTemp> tempList = qwSopTempService.listTemp().stream().filter(e -> StringUtils.isNotEmpty(e.getSetting())).collect(Collectors.toList());
-//        Map<String, QwSopTemp> tempMap = PubFun.listToMapByGroupObject(tempList, QwSopTemp::getId);
-//        Map<String, List<QwSopTempSetting2>> collect = tempList.stream().collect(Collectors.toMap(QwSopTemp::getId, e -> JSONArray.parseArray(e.getSetting(), QwSopTempSetting2.class)));
-//        collect.forEach((k, rules) -> {
-//            QwSopTemp qwSopTemp = tempMap.get(k);
-//            for (int i = 0; i < rules.size(); i++) {
-//                QwSopTempSetting2 e = rules.get(i);
-//                QwSopTempDay qwSopTempDay = new QwSopTempDay();
-//                qwSopTempDay.setSorts(i);
-//                qwSopTempDay.setName(e.getName());
-//                qwSopTempDay.setDayNum((qwSopTempDay.getSorts() * qwSopTemp.getGap()) + 1);
-//                qwSopTempDay.setTempId(k);
-//                qwSopTemp.getList().add(qwSopTempDay);
-//                for (int i1 = 0; i1 < e.getContent().size(); i1++) {
-//                    QwSopTempRules qwSopTempRules = new QwSopTempRules();
-//                    qwSopTempRules.setTempId(k);
-//                    qwSopTempRules.setName(e.getName());
-//                    qwSopTempRules.setSorts(i1);
-//                    QwSopTempSetting2.Content vo = e.getContent().get(i1);
-//                    qwSopTempRules.setTime(vo.getTime());
-//                    qwSopTempRules.setType(vo.getType());
-//                    qwSopTempRules.setContentType(StringUtils.isNotEmpty(vo.getContentType()) ? Integer.parseInt(vo.getContentType()) : null);
-//                    qwSopTempRules.setCourseType(vo.getCourseType());
-//                    qwSopTempRules.setCourseId(vo.getCourseId());
-//                    qwSopTempRules.setVideoId(vo.getVideoId());
-//                    qwSopTempRules.setAiTouch(vo.getAiTouch());
-//                    qwSopTempDay.getList().add(qwSopTempRules);
-//                    for (int i2 = 0; i2 < vo.getSetting().size(); i2++) {
-//                        QwSopTempSetting2.Content.Setting setting = vo.getSetting().get(i2);
-//                        QwSopTempContent qwSopTempContent = new QwSopTempContent();
-//                        qwSopTempContent.setTempId(k);
-//                        qwSopTempContent.setContentType(StringUtils.isNotEmpty(setting.getContentType()) ? Integer.parseInt(setting.getContentType()) : null);
-//                        qwSopTempContent.setContent(JSON.toJSONString(setting));
-//                        qwSopTempContent.setIsBindUrl(setting.getIsBindUrl());
-//                        qwSopTempContent.setExpiresDays(setting.getExpiresDays());
-//                        qwSopTempRules.getList().add(qwSopTempContent);
-//                    }
-//                }
-//            }
-//        });
-////        System.out.println(1);
-//        tempList.parallelStream().forEach(qwSopTemp -> {
-////            new Thread(() -> {
-//                qwSopTempDayService.saveList(qwSopTemp.getList());
-//                List<QwSopTempRules> ruleList = qwSopTemp.getList().stream().flatMap(e -> e.getList().stream().peek(s -> s.setDayId(e.getId()))).collect(Collectors.toList());
-//                qwSopTempRulesService.saveList(ruleList);
-//                List<QwSopTempContent> contentList = ruleList.stream().flatMap(s -> s.getList().stream().peek(c -> c.setRulesId(s.getId()))).collect(Collectors.toList());
-//                qwSopTempContentService.saveList(contentList);
-////            }).start();
-//        });
-//    }
-//    @GetMapping("test")
-//    @DataSource(DataSourceType.SOP)
-//    public void fileDownload(){
-//        List<QwSopTempContent> contentList = qwSopTempContentService.list(new QueryWrapper<QwSopTempContent>().isNull("day_id"));
-//        List<Long> longs = PubFun.listToNewList(contentList, QwSopTempContent::getRulesId);
-//        List<QwSopTempRules> ruleList = qwSopTempRulesService.list(new QueryWrapper<QwSopTempRules>().in("id", longs));
-//        Map<Long, QwSopTempRules> rulesMap = PubFun.listToMapByGroupObject(ruleList, QwSopTempRules::getId);
-//        contentList.stream().filter(e ->rulesMap.containsKey(e.getRulesId())).forEach(qwSopTempContent -> {
-//            qwSopTempContent.setDayId(rulesMap.get(qwSopTempContent.getRulesId()).getDayId());
-//        });
-//        contentList.forEach(qwSopTempContentService::updateDay);
-//    }
+    @Autowired
+    IErpOrderService erpOrderService;
     @GetMapping("test")
-    @DataSource(DataSourceType.SOP)
-    public void fileDownload(){
-        rocketMQTemplate.syncSend("ad-upload", JSON.toJSONString(AdUploadVo.builder().state("测试").type(AdUploadType.ADD_WX).build()));
+    public void fileDownload() {
+        System.out.println("11111111111111");
+        List<RedPacketMoneyVO> redPacketMoneyVOS = fsCourseRedPacketLogMapper.selectFsCourseRedPacketLogByCompany();
+        for (RedPacketMoneyVO redPacketMoneyVO : redPacketMoneyVOS) {
+            companyService.subtractCompanyMoney(redPacketMoneyVO.getMoney(),redPacketMoneyVO.getCompanyId());
+        }
     }
 }

+ 1 - 1
fs-company/src/main/java/com/fs/framework/config/SecurityConfig.java

@@ -110,7 +110,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                         "/**/*.js",
                         "/profile/**"
                 ).permitAll()
-
+                .antMatchers("/test").anonymous()
                 .antMatchers("**/callerResult").anonymous()
                 .antMatchers("/qw/getJsapiTicket/**").anonymous()
                 .antMatchers("/msg/**").anonymous()

+ 7 - 1
fs-doctor-app/src/main/java/com/fs/app/controller/DoctorController.java

@@ -112,6 +112,7 @@ public class DoctorController extends  AppBaseController {
         //获取管理员token
         String userId = userIdMap.get("userId");
         String adminToken = openIMService.getAdminToken();
+
         JSONObject requestBody = new JSONObject();
         // 解析响应
         if (StringUtil.isNotEmpty(adminToken)) {
@@ -128,6 +129,7 @@ public class DoctorController extends  AppBaseController {
                     .body();
             JSONObject jsonObject = new JSONObject(body);
             JSONArray results = jsonObject.getJSONObject("data").getJSONArray("results");
+            System.out.println("查询用户结果:"+results);
             if (results != null && results.length() > 0) {
                 JSONObject resultObj = results.getJSONObject(0);
                 int accountStatus = resultObj.getInt("accountStatus");
@@ -158,10 +160,14 @@ public class DoctorController extends  AppBaseController {
             requestBody = new JSONObject();
             requestBody.put("platformID",5);
             requestBody.put("userID",userId);
-            String body1 = HttpRequest.post(IMConfig.URL+"/api/auth/get_user_token")
+            String body1 = HttpRequest.post(IMConfig.URL+"/auth/get_user_token")
                     .header("operationID", String.valueOf(System.currentTimeMillis()))
                     .header("token", adminToken)
                     .body(requestBody.toString()).execute().body();
+            System.out.println("operationID"+System.currentTimeMillis());
+            System.out.println("adimtoken"+adminToken);
+            System.out.println("IPad地址"+IMConfig.URL+"/api/auth/get_user_token");
+            System.out.println("json接送内容:"+body1);
             JSONObject userJson = new JSONObject(body1);
             JSONObject userData = userJson.getJSONObject("data");
             String userToken = userData.getString("token");

+ 1 - 5
fs-doctor-app/src/main/java/com/fs/app/controller/InquiryOrderController.java

@@ -96,11 +96,7 @@ public class InquiryOrderController extends  AppBaseController {
         FsDoctor doctor=doctorService.selectFsDoctorByDoctorId(Long.parseLong(getDoctorId()));
         PageHelper.startPage(param.getPageNum(), param.getPageSize());
 
-        if (Objects.nonNull(param.getUserId())) {
-            param.setDoctorId(null);
-        } else if (Objects.nonNull(param.getDoctorId())) {
-            param.setDoctorId(Long.parseLong(getDoctorId()));
-        }
+        param.setDoctorId(Long.parseLong(getDoctorId()));
 
         param.setIsAccept(doctor.getIsAccept());
         param.setIsSelf(doctor.getIsSelf());

+ 1 - 1
fs-qwhook/src/main/resources/application.yml

@@ -10,4 +10,4 @@ spring:
 #    active: druid-yzt
 #    active: druid-hdt
 #    active: druid-sxjz
-    active: druid-sft
+    active: dev

+ 87 - 0
fs-service/src/main/resources/application-config-druid-syysy-test.yml

@@ -0,0 +1,87 @@
+baidu:
+  token: 1
+  back-domain: https://www.xxxx.com
+#配置
+logging:
+  level:
+    org.springframework.web: INFO
+    com.github.binarywang.demo.wx.cp: DEBUG
+    me.chanjar.weixin: DEBUG
+wx:
+  miniapp:
+    configs:
+      - appid: w   #中康智慧
+        secret: 5
+        token: Ncbnd7lJvkripVOpyTFAna6NAWCxCrvC
+        aesKey: HlEiBB55eaWUaeBVAQO3cWKWPYv1vOVQSq7nFNICw4E
+        msgDataFormat: JSON
+      - appid: w   #中康未来智慧药房
+        secret: 9
+        token: Ncbnd7lJvkripVOpyTFAna6NAWCxCrvC
+        aesKey: HlEiBB55eaWUaeBVAQO3cWKWPYv1vOVQSq7nFNICw4E
+        msgDataFormat: JSON
+  cp:
+    corpId: wwb
+    appConfigs:
+      - agentId: 100005
+        secret: ec7okROXJqkNafq66aKNv0asTzQIG0CYrj3vyBbo
+        token: PPKOdAloMO
+        aesKey: PKvaxtpSvNGpfTDm7VUHIK8Wok2ESyYX24qpXJAdMP
+  pay:
+    appId: wx #微信公众号或者小程序等的appid
+    mchId: 1611045 #微信支付商户号
+    mchKey: 8cab128997a3547c10898b877f38 #微信支付商户密钥
+    subAppId:  #服务商模式下的子商户公众账号ID
+    subMchId:  #服务商模式下的子商户号
+    keyPath: c:\\cert\\apiclient_cert.p12 # p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)
+    notifyUrl: https://usepp.his.runtzh.com/app/wxpay/wxPayNotify
+  mp:
+    useRedis: false
+    redisConfig:
+      host: 127.0.0.1
+      port: 6379
+      timeout: 2000
+    configs:
+      - appId: wx # 第一个公众号的appid  //公众号名称
+        secret: 5da9ae # 公众号的appsecret
+        token: PPKOdAlCoMO # 接口配置里的Token值
+        aesKey: Eswa6VjwtVcw03qZy6Wllgrv5aytIA1SZPEU0kU2 # 接口配置里的EncodingAESKey值
+aifabu:  #爱链接
+  appKey: 7b471be905ab17ef358c610dd117601d008
+watch:
+  watchUrl: watch.ylrzcloud.com/prod-api
+#  account: tcloud
+#  password: mdf-m2h_6yw2$hq
+  account1: ccif #866655060138751
+  password1: cp-t5or_6xw7$mt
+  account2: tcloud #rt500台
+  password2: mdf-m2h_6yw2$hq
+  account3: whr
+  password3: v9xsKuqn_$d2y
+
+fs :
+  commonApi: http://159.75.111.224:8010
+  h5CommonApi: http://159.75.111.224:8010
+nuonuo:
+  key: 10924508
+  secret: A2EB20764D304D16
+# 存储捅配置
+tencent_cloud_config:
+  secret_id: AKIDiMq9lDf2EOM9lIfqqfKo7FNgM5meD0sT
+  secret_key: u5SuS80342xzx8FRBukza9lVNHKNMSaB
+  bucket: syysy-1323137866
+  app_id: 1323137866
+  region: ap-chongqing
+  proxy: syysy
+cloud_host:
+  company_name: 益善缘
+#看课授权时显示的头像
+headerImg:
+  imgUrl: https://ysy-1329817240.cos.ap-guangzhou.myqcloud.com/ysy/20250820/2c47e4f105b641b4a49df50a77338e32.png
+ipad:
+  ipadUrl: http://ipad.ysya.top
+  aiApi:
+wx_miniapp_temp:
+  pay_order_temp_id:
+  inquiry_temp_id:
+

+ 2 - 2
fs-service/src/main/resources/application-config-druid-syysy.yml

@@ -60,8 +60,8 @@ watch:
   password3: v9xsKuqn_$d2y
 
 fs :
-  commonApi: http://172.27.0.12:8010
-  h5CommonApi: http://172.27.0.12:8010
+  commonApi: http://159.75.111.224:8010
+  h5CommonApi: http://159.75.111.224:8010
 nuonuo:
   key: 10924508
   secret: A2EB20764D304D16

+ 1 - 0
fs-service/src/main/resources/application-dev.yml

@@ -162,3 +162,4 @@ token:
 openIM:
     secret: openIM123
     userID: imAdmin
+    url: web.im.ysya.top

+ 166 - 0
fs-service/src/main/resources/application-druid-syysy-test.yml

@@ -0,0 +1,166 @@
+# 数据源配置
+spring:
+    profiles:
+        include: config-druid-syysy-test,common
+    # redis 配置
+    redis:
+        host: 127.0.0.1
+        port: 6379
+        # 数据库索引
+        database: 0
+        # 密码
+        password:
+        # 连接超时时间
+        timeout: 10s
+        lettuce:
+            pool:
+                # 连接池中的最小空闲连接
+                min-idle: 0
+                # 连接池中的最大空闲连接
+                max-idle: 8
+                # 连接池的最大数据库连接数
+                max-active: 8
+                # #连接池最大阻塞等待时间(使用负值表示没有限制)
+                max-wait: -1ms
+    datasource:
+        #        clickhouse:
+        #            type: com.alibaba.druid.pool.DruidDataSource
+        #            driverClassName: com.clickhouse.jdbc.ClickHouseDriver
+        #            url: jdbc:clickhouse://1.14.104.71:8123/sop_test?compress=0&use_server_time_zone=true&use_client_time_zone=false&timezone=Asia/Shanghai
+        #            username: rt_2024
+        #            password: Yzx_19860213
+        #            initialSize: 10
+        #            maxActive: 100
+        #            minIdle: 10
+        #            maxWait: 6000
+        mysql:
+            type: com.alibaba.druid.pool.DruidDataSource
+            driverClassName: com.mysql.cj.jdbc.Driver
+            druid:
+                # 主库数据源
+                master:
+                    url: jdbc:mysql://139.199.225.59:2345/fs_his?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    username: root
+                    password: Ylrz_tM818782145I@
+                # 从库数据源
+                slave:
+                    # 从数据源开关/默认关闭
+                    url: jdbc:mysql://139.199.225.59:2345/fs_his?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    username: root
+                    password: Ylrz_tM818782145I@
+                # 初始连接数
+                initialSize: 5
+                # 最小连接池数量
+                minIdle: 10
+                # 最大连接池数量
+                maxActive: 2000
+                # 配置获取连接等待超时的时间
+                maxWait: 60000
+                # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+                timeBetweenEvictionRunsMillis: 60000
+                # 配置一个连接在池中最小生存的时间,单位是毫秒
+                minEvictableIdleTimeMillis: 300000
+                # 配置一个连接在池中最大生存的时间,单位是毫秒
+                maxEvictableIdleTimeMillis: 900000
+                # 配置检测连接是否有效
+                validationQuery: SELECT 1 FROM DUAL
+                testWhileIdle: true
+                testOnBorrow: false
+                testOnReturn: false
+                webStatFilter:
+                    enabled: true
+                statViewServlet:
+                    enabled: true
+                    # 设置白名单,不填则允许所有访问
+                    allow:
+                    url-pattern: /druid/*
+                    # 控制台管理用户名和密码
+                    login-username: fs
+                    login-password: 123456
+                filter:
+                    stat:
+                        enabled: true
+                        # 慢SQL记录
+                        log-slow-sql: true
+                        slow-sql-millis: 1000
+                        merge-sql: true
+                    wall:
+                        config:
+                            multi-statement-allow: true
+        sop:
+            type: com.alibaba.druid.pool.DruidDataSource
+            driverClassName: com.mysql.cj.jdbc.Driver
+            druid:
+                # 主库数据源
+                master:
+                    url: jdbc:mysql://172.16.0.7:3306/sop?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    username: root
+                    password: Ylrz_tM818782145I@
+                # 初始连接数
+                initialSize: 5
+                # 最小连接池数量
+                minIdle: 10
+                # 最大连接池数量
+                maxActive: 200
+                # 配置获取连接等待超时的时间
+                maxWait: 60000
+                # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+                timeBetweenEvictionRunsMillis: 60000
+                # 配置一个连接在池中最小生存的时间,单位是毫秒
+                minEvictableIdleTimeMillis: 300000
+                # 配置一个连接在池中最大生存的时间,单位是毫秒
+                maxEvictableIdleTimeMillis: 900000
+                # 配置检测连接是否有效
+                validationQuery: SELECT 1 FROM DUAL
+                testWhileIdle: true
+                testOnBorrow: false
+                testOnReturn: false
+                webStatFilter:
+                    enabled: true
+                statViewServlet:
+                    enabled: true
+                    # 设置白名单,不填则允许所有访问
+                    allow:
+                    url-pattern: /druid/*
+                    # 控制台管理用户名和密码
+                    login-username: fs
+                    login-password: 123456
+                filter:
+                    stat:
+                        enabled: true
+                        # 慢SQL记录
+                        log-slow-sql: true
+                        slow-sql-millis: 1000
+                        merge-sql: true
+                    wall:
+                        config:
+                            multi-statement-allow: true
+rocketmq:
+    name-server: rmq-1243b25nj.rocketmq.gz.public.tencenttdmq.com:8080 # RocketMQ NameServer 地址
+    producer:
+        group: my-producer-group
+        access-key: ak1243b25nj17d4b2dc1a03 # 替换为实际的 accessKey
+        secret-key: sk08a7ea1f9f4b0237 # 替换为实际的 secretKey
+    consumer:
+        group: voice-group
+        access-key: ak1243b25nj17d4b2dc1a03 # 替换为实际的 accessKey
+        secret-key: sk08a7ea1f9f4b0237 # 替换为实际的 secretKey
+custom:
+    token: "1o62d3YxvdHd4LEUiltnu7sK"
+    encoding-aes-key: "UJfTQ5qKTKlegjkXtp1YuzJzxeHlUKvq5GyFbERN1iU"
+    corp-id: "ww51717e2b71d5e2d3"
+    secret: "6ODAmw-8W4t6h9mdzHh2Z4Apwj8mnsyRnjEDZOHdA7k"
+    private-key-path: "privatekey.pem"
+    webhook-url: "https://your-server.com/wecom/archive"
+# token配置
+token:
+    # 令牌自定义标识
+    header: Authorization
+    # 令牌密钥
+    secret: abcdefghijklmnopqrstuvwxyz
+    # 令牌有效期(默认30分钟)
+    expireTime: 180
+openIM:
+    secret: openIM123
+    userID: imAdmin
+    url: https://web.im.ysya.top/api

+ 1 - 0
fs-service/src/main/resources/application-druid-syysy.yml

@@ -163,3 +163,4 @@ token:
 openIM:
     secret: openIM123
     userID: imAdmin
+    url: https://web.im.ysya.top/api

+ 0 - 1
fs-user-app/src/main/java/com/fs/FsUserAppApplication.java

@@ -20,7 +20,6 @@ public class FsUserAppApplication
 {
     public static void main(String[] args)
     {
-
         // System.setProperty("spring.devtools.restart.enabled", "false");
         SpringApplication.run(FsUserAppApplication.class, args);
         System.out.println("AppAPI启动成功");

+ 2 - 0
fs-user-app/src/main/java/com/fs/app/controller/WxUserController.java

@@ -145,6 +145,7 @@ public class WxUserController extends AppBaseController{
                     //写入
                     user=new FsUser();
                     user.setPhone(phoneNoInfo.getPhoneNumber());
+                    user.setNickname("微信用户"+phoneNoInfo.getPhoneNumber().substring(phoneNoInfo.getPhoneNumber().length()-4));
                     user.setNickName("微信用户"+phoneNoInfo.getPhoneNumber().substring(phoneNoInfo.getPhoneNumber().length()-4));
                     user.setAvatar("https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20230725/a848605591384ec29d49773dd58d9345.jpg");
                     user.setStatus(1);
@@ -251,6 +252,7 @@ public class WxUserController extends AppBaseController{
                     //写入
                     user=new FsUser();
                     user.setPhone(phoneNoInfo.getPhoneNumber());
+                    user.setNickname("微信用户"+phoneNoInfo.getPhoneNumber().substring(phoneNoInfo.getPhoneNumber().length()-4));
                     user.setNickName("微信用户"+phoneNoInfo.getPhoneNumber().substring(phoneNoInfo.getPhoneNumber().length()-4));
                     user.setAvatar("https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20230725/a848605591384ec29d49773dd58d9345.jpg");
                     user.setStatus(1);

+ 9 - 2
fs-user-app/src/main/java/com/fs/framework/config/SecurityConfig.java

@@ -6,10 +6,11 @@ import org.springframework.security.config.BeanIds;
 import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.web.firewall.StrictHttpFirewall;
 
 /**
  * spring security配置
- * 
+ *
 
  */
 @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
@@ -45,6 +46,12 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
     public AuthenticationManager authenticationManagerBean() throws Exception {
         return super.authenticationManagerBean();
     }
-
+    @Bean
+    public StrictHttpFirewall httpFirewall() {
+        StrictHttpFirewall firewall = new StrictHttpFirewall();
+        // 允许URL编码的双斜杠
+        firewall.setAllowUrlEncodedDoubleSlash(true);
+        return firewall;
+    }
 
 }