起因是引入hibernate-search后,通过massIndexes生成索引时获取ORM session失败。
SearchSession searchSession = Search.session(entityManager);
表象
1.阶段1
项目目录结构为com.fscut,配置文件KnowledgeWebConfig位于包conf下。
此时失败,修改项目结构为com.fscut.kb(存疑),
ORM session获取成功
2.阶段2
原项目git下源码位于PlatformKnowledge文件夹下,
将src从PlatformKnowledge直接移到根目录下,删除PlatformKnowledge文件夹,
此时失败,将配置文件KnowledgeWebConfig的package修改如下:
// 原
package com.fscut.kb.config;
// 新 此时标红
package com.fscut.config;
修改为错误的包路径后,ORM session获取成功。
3.小结
不管是1,2阶段,普通jpa查询@query查询均正常。
分析
经过测试,去掉KnowledgeWebConfig的继承关系也可以成功获取ORM session。
package com.fscut.kb.config;
@Configuration
public class KnowledgeWebConfig { //extends WebMvcConfigurationSupport {
与该父类相关的两个override并不在影响之列,只要继承了就会获取失败。
初步判断,该配置影响了springboot默认的autoconfiguration。
类似博客参考:
https://blog.csdn.net/qq_38951372/article/details/96423781
但是未发现完全一致的博客参考,毕竟在自定义配置之后依然启用了默认设置。
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(responseBodyConverter());
converters.add(jackson2HttpMessageConverter());
addDefaultHttpMessageConverters(converters);
}
或者说,并不知道为什么WebMvcConfigurationSupport
的实现方式跟项目路径还有关系。
方案
重写WebConfig,通过WebMvcConfigurer而非WebMvcConfigurationSupport。
@Configuration
public class CustomWebConfig extends WebMvcConfigurationSupport {}
@Configuration
public class CustomWebConfig implements WebMvcConfigurer {}
参考博客:
https://www.jianshu.com/p/4f2807a5468c
测试
1.跨域是否生效
生效。
测试环境和流程描述:
本地,通过origin:null发送请求,在携带tgc cookie的情况下未发生跨域异常。
周心萌本地,由于跨域未携带tgc cookie导致登录校验未通过,导致“跨域异常”。
经过讨论分析,由于金色平台前端和cas域名原本就一样,如下Origin所示,同源的情况下默认就会带上cookie,故金色平台请求携带了tgc cookie。
GET /api/support/listTreeType HTTP/1.1
Host: kb.bcjgy.com
Connection: keep-alive
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36
Origin: http://gold.bcjgy.com
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://gold.bcjgy.com/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: TGC=TGT-dc8a6801-50a7-48f3-98f7-4a479c6a0870
而真正跨域的时候,不会默认带上cookie,如同周心萌本地zxm.bcjgy.com请求我本地IP。
此时cookie默认不携带,tgc校验失败,表征为console出现跨域异常提示。
故金色平台前端需检查配置,使得所有请求在跨域情况下依然携带tgc cookie。
tgc校验未通过表征为cors异常提示,以及服务不能访问或500异常时表征为cors异常提示此处不做讨论,以上并非真正意义上的跨域。
2.response-json是否生效
经过测试,原配置也没生效,去掉配置反而可以响应@JsonFormat
。