Просмотр исходного кода

第一次更新("ES搜索指引")

杨旭朋 2 недель назад
Родитель
Сommit
65a4f991a1

+ 25 - 1
pom.xml

@@ -96,6 +96,30 @@
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
+        <!-- es依赖 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.elasticsearch.client</groupId>
+            <artifactId>elasticsearch-rest-high-level-client</artifactId>
+            <version>7.17.3</version> <!-- 此版本需与 Spring Boot 2.7.6 兼容 -->
+        </dependency>
+        <dependency>
+            <groupId>org.elasticsearch.client</groupId>
+            <artifactId>elasticsearch-rest-client</artifactId>
+            <version>7.17.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.elasticsearch</groupId>
+            <artifactId>elasticsearch</artifactId>
+            <version>7.17.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-mongodb</artifactId>
+        </dependency>
     </dependencies>
     <dependencyManagement>
         <dependencies>
@@ -141,4 +165,4 @@
         </plugins>
     </build>
 
-</project>
+</project>

+ 208 - 208
src/main/java/com/futu/course/common/config/IntercepterConfig.java

@@ -1,217 +1,217 @@
-package com.futu.course.common.config;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializerProvider;
-
-import com.futu.course.common.handle.CurrentUserHandler;
-import com.futu.course.common.intercepter.AuthIntercepter;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Primary;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
-import org.springframework.web.filter.HttpPutFormContentFilter;
-import org.springframework.web.method.support.HandlerMethodArgumentResolver;
-import org.springframework.web.servlet.config.annotation.CorsRegistry;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
-
-import java.io.IOException;
-import java.util.List;
-
-@Configuration
-@Slf4j
-//@EnableWebMvc
-public class IntercepterConfig extends WebMvcConfigurationSupport {
-
-    @Override
-    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
-        log.info("IntercepterConfig--------------------");
-        resolvers.add(new CurrentUserHandler());
-    }
-    @Autowired
-    AuthIntercepter authIntercepter;
-    @Autowired
-    protected RedisTemplate redisTemplate;
-
-    @Override
-    public void addInterceptors(InterceptorRegistry registry) {
-        // 拦截所有请求,通过判断是否有 @LoginRequired 注解 决定是否需要登录
-        registry.addInterceptor(authenticationInterceptor()).excludePathPatterns("**.html").excludePathPatterns("**.txt")
-                .excludePathPatterns("/webjars/**")
-                .excludePathPatterns("/api/goods-detail")
-                .excludePathPatterns("/api/home")
-                .excludePathPatterns("/api/cate")
-                .excludePathPatterns("/api/goods")
-                .excludePathPatterns("/api/boss/home")
-                .excludePathPatterns("/api/boss/team-detail")
-                .excludePathPatterns("/api/boss/home-detail")
-                .excludePathPatterns("/api/boss/supplier")
-                .excludePathPatterns("/api/boss/lottery")
-                .excludePathPatterns("/api/boss/lottery-detail")
-                .excludePathPatterns("/api/team-buy")
-                .excludePathPatterns("/api/cart")
-                .excludePathPatterns("/api/order")
-                .excludePathPatterns("/api/keywords")
-                .excludePathPatterns("/api/share-detail")
-                .excludePathPatterns("/dashboard/list")
-                .excludePathPatterns("/swagger-ui.html")
-                .excludePathPatterns("/swagger-resources/**").excludePathPatterns("/error").addPathPatterns("/**");
-        super.addInterceptors(registry);
-    }
-
-
-    @Override
-    public void addResourceHandlers(ResourceHandlerRegistry registry) {
-        super.addResourceHandlers(registry);
-        registry.addResourceHandler("/**")
-                .addResourceLocations("classpath:/static/")
-                .addResourceLocations("classpath:/templates/")
-                .addResourceLocations("classpath:/resources/");
-//        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
-//        registry.addResourceHandler("swagger-ui.html")
+//package com.futu.course.common.config;
+//
+//import com.fasterxml.jackson.annotation.JsonInclude;
+//import com.fasterxml.jackson.core.JsonGenerator;
+//import com.fasterxml.jackson.core.JsonParser;
+//import com.fasterxml.jackson.databind.DeserializationFeature;
+//import com.fasterxml.jackson.databind.JsonSerializer;
+//import com.fasterxml.jackson.databind.ObjectMapper;
+//import com.fasterxml.jackson.databind.SerializerProvider;
+//
+//import com.futu.course.common.handle.CurrentUserHandler;
+//import com.futu.course.common.intercepter.AuthIntercepter;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+//import org.springframework.context.annotation.Primary;
+//import org.springframework.data.redis.core.RedisTemplate;
+//import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
+//import org.springframework.web.filter.HttpPutFormContentFilter;
+//import org.springframework.web.method.support.HandlerMethodArgumentResolver;
+//import org.springframework.web.servlet.config.annotation.CorsRegistry;
+//import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+//import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+//import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
+//
+//import java.io.IOException;
+//import java.util.List;
+//
+//@Configuration
+//@Slf4j
+////@EnableWebMvc
+//public class IntercepterConfig extends WebMvcConfigurationSupport {
+//
+//    @Override
+//    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
+//        log.info("IntercepterConfig--------------------");
+//        resolvers.add(new CurrentUserHandler());
+//    }
+//    @Autowired
+//    AuthIntercepter authIntercepter;
+//    @Autowired
+//    protected RedisTemplate redisTemplate;
+//
+//    @Override
+//    public void addInterceptors(InterceptorRegistry registry) {
+//        // 拦截所有请求,通过判断是否有 @LoginRequired 注解 决定是否需要登录
+//        registry.addInterceptor(authenticationInterceptor()).excludePathPatterns("**.html").excludePathPatterns("**.txt")
+//                .excludePathPatterns("/webjars/**")
+//                .excludePathPatterns("/api/goods-detail")
+//                .excludePathPatterns("/api/home")
+//                .excludePathPatterns("/api/cate")
+//                .excludePathPatterns("/api/goods")
+//                .excludePathPatterns("/api/boss/home")
+//                .excludePathPatterns("/api/boss/team-detail")
+//                .excludePathPatterns("/api/boss/home-detail")
+//                .excludePathPatterns("/api/boss/supplier")
+//                .excludePathPatterns("/api/boss/lottery")
+//                .excludePathPatterns("/api/boss/lottery-detail")
+//                .excludePathPatterns("/api/team-buy")
+//                .excludePathPatterns("/api/cart")
+//                .excludePathPatterns("/api/order")
+//                .excludePathPatterns("/api/keywords")
+//                .excludePathPatterns("/api/share-detail")
+//                .excludePathPatterns("/dashboard/list")
+//                .excludePathPatterns("/swagger-ui.html")
+//                .excludePathPatterns("/swagger-resources/**").excludePathPatterns("/error").addPathPatterns("/**");
+//        super.addInterceptors(registry);
+//    }
+//
+//
+//    @Override
+//    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+//        super.addResourceHandlers(registry);
+//        registry.addResourceHandler("/**")
+//                .addResourceLocations("classpath:/static/")
+//                .addResourceLocations("classpath:/templates/")
 //                .addResourceLocations("classpath:/resources/");
-//        registry.addResourceHandler("resources/**.html")
+////        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
+////        registry.addResourceHandler("swagger-ui.html")
+////                .addResourceLocations("classpath:/resources/");
+////        registry.addResourceHandler("resources/**.html")
+////                .addResourceLocations("classpath:/META-INF/resources/");
+////
+////        registry.addResourceHandler("doc.html")
+////                .addResourceLocations("classpath:resources/");
+////
+////        registry.addResourceHandler("/webjars/**")
+////                .addResourceLocations("classpath:resources/webjars/");
+//        registry.addResourceHandler("swagger-ui.html")
 //                .addResourceLocations("classpath:/META-INF/resources/");
+//        registry.addResourceHandler("/webjars/**")
+//                .addResourceLocations("classpath:/META-INF/resources/webjars/");
+//        registry.addResourceHandler("SFLMPwcUTv.txt")
+//                .addResourceLocations("classpath:/resources/");
 //
-//        registry.addResourceHandler("doc.html")
-//                .addResourceLocations("classpath:resources/");
+//    }
+//    @Override
+//    public void addCorsMappings(CorsRegistry registry) {
+//        super.addCorsMappings(registry);
+//        registry
+//                .addMapping("/**")
+//                .allowedHeaders("*")
+//                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
+//                .allowedOrigins("*");
+//    }
 //
-//        registry.addResourceHandler("/webjars/**")
-//                .addResourceLocations("classpath:resources/webjars/");
-        registry.addResourceHandler("swagger-ui.html")
-                .addResourceLocations("classpath:/META-INF/resources/");
-        registry.addResourceHandler("/webjars/**")
-                .addResourceLocations("classpath:/META-INF/resources/webjars/");
-        registry.addResourceHandler("SFLMPwcUTv.txt")
-                .addResourceLocations("classpath:/resources/");
-
-    }
-    @Override
-    public void addCorsMappings(CorsRegistry registry) {
-        super.addCorsMappings(registry);
-        registry
-                .addMapping("/**")
-                .allowedHeaders("*")
-                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
-                .allowedOrigins("*");
-    }
-
-    @Bean
-    public AuthIntercepter authenticationInterceptor() {
-        return new AuthIntercepter(redisTemplate);
-    }
-
 //    @Bean
-//    public CurrentUserMethodArgumentResolver currentUserMethodArgumentResolver() {
-//        return new CurrentUserMethodArgumentResolver();
+//    public AuthIntercepter authenticationInterceptor() {
+//        return new AuthIntercepter(redisTemplate);
 //    }
-//    @Override
-////    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
-////        argumentResolvers.add(currentUserMethodArgumentResolver());
-////        super.addArgumentResolvers(argumentResolvers);
+//
+////    @Bean
+////    public CurrentUserMethodArgumentResolver currentUserMethodArgumentResolver() {
+////        return new CurrentUserMethodArgumentResolver();
 ////    }
-
-    /**
-     * @Description 解决使用put请求   服务器接收不到参数
-     * @author DengKaiTao
-     * @date 2018/12/4 16:35
-     * @return org.springframework.web.filter.HttpPutFormContentFilter
-     * @version v1.0
-     **/
-    @Bean
-    public HttpPutFormContentFilter httpPutFormContentFilter() {
-        return new HttpPutFormContentFilter();
-    }
-
-//    @Override
-//    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
-//
-////        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
-////        FastJsonConfig config = new FastJsonConfig();
-////        config.setSerializerFeatures(
-////                //保留map空的字段
-////                SerializerFeature.WriteMapNullValue,
-////                // 将String类型的NULL转化为""
-////                SerializerFeature.WriteNullStringAsEmpty,
-////                // 将Number类型的NULL转化为0
-////                SerializerFeature.WriteNullNumberAsZero,
-////                // 将List类型的NULL转成[]
-////                SerializerFeature.WriteNullListAsEmpty,
-////                // 将Boolean类型的NULL转化为false
-////                SerializerFeature.WriteNullBooleanAsFalse,
-////                SerializerFeature.PrettyFormat,
-////                // 避免循环引用
-////                SerializerFeature.DisableCircularReferenceDetect);
-////
-////        converter.setFastJsonConfig(config);
-////        converter.setDefaultCharset(Charset.forName("UTF-8"));
+////    @Override
+//////    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
+//////        argumentResolvers.add(currentUserMethodArgumentResolver());
+//////        super.addArgumentResolvers(argumentResolvers);
+//////    }
+//
+//    /**
+//     * @Description 解决使用put请求   服务器接收不到参数
+//     * @author DengKaiTao
+//     * @date 2018/12/4 16:35
+//     * @return org.springframework.web.filter.HttpPutFormContentFilter
+//     * @version v1.0
+//     **/
+//    @Bean
+//    public HttpPutFormContentFilter httpPutFormContentFilter() {
+//        return new HttpPutFormContentFilter();
+//    }
+//
+////    @Override
+////    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
 ////
-////        List<MediaType> mediaTypeList = new ArrayList<>();
-////        // 解决中文乱码问题,相当于在Controller上的@RequestMapping中加了个属性produces = "application/json"
-////        mediaTypeList.add(MediaType.APPLICATION_JSON);
-////        converter.setSupportedMediaTypes(mediaTypeList);
-////        converters.add(converter);
-//        //定义Json转换器
-//        MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
-//        ObjectMapper objectMapper = new ObjectMapper();
-//        //定义对象模型
-//        SimpleModule simpleModule = new SimpleModule();
-//        //添加对长整型的转换关系
-//        simpleModule.addSerializer(BigInteger.class, ToStringSerializer.instance);
-////        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
-////        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
-////        simpleModule.addSerializer(Date.class,ToStringSerializer.instance);
-//        //将对象模型添加至对象映射器
-//        objectMapper.registerModule(simpleModule);
-//        jackson2HttpMessageConverter.setObjectMapper(objectMapper);
-//        //在转换器列表中添加自定义的Json转换器
-//        converters.add(jackson2HttpMessageConverter);
-//        //添加utf-8的默认String转换器
-//        converters.add(new StringHttpMessageConverter(Charset.forName("UTF-8")));
+//////        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
+//////        FastJsonConfig config = new FastJsonConfig();
+//////        config.setSerializerFeatures(
+//////                //保留map空的字段
+//////                SerializerFeature.WriteMapNullValue,
+//////                // 将String类型的NULL转化为""
+//////                SerializerFeature.WriteNullStringAsEmpty,
+//////                // 将Number类型的NULL转化为0
+//////                SerializerFeature.WriteNullNumberAsZero,
+//////                // 将List类型的NULL转成[]
+//////                SerializerFeature.WriteNullListAsEmpty,
+//////                // 将Boolean类型的NULL转化为false
+//////                SerializerFeature.WriteNullBooleanAsFalse,
+//////                SerializerFeature.PrettyFormat,
+//////                // 避免循环引用
+//////                SerializerFeature.DisableCircularReferenceDetect);
+//////
+//////        converter.setFastJsonConfig(config);
+//////        converter.setDefaultCharset(Charset.forName("UTF-8"));
+//////
+//////        List<MediaType> mediaTypeList = new ArrayList<>();
+//////        // 解决中文乱码问题,相当于在Controller上的@RequestMapping中加了个属性produces = "application/json"
+//////        mediaTypeList.add(MediaType.APPLICATION_JSON);
+//////        converter.setSupportedMediaTypes(mediaTypeList);
+//////        converters.add(converter);
+////        //定义Json转换器
+////        MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
+////        ObjectMapper objectMapper = new ObjectMapper();
+////        //定义对象模型
+////        SimpleModule simpleModule = new SimpleModule();
+////        //添加对长整型的转换关系
+////        simpleModule.addSerializer(BigInteger.class, ToStringSerializer.instance);
+//////        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
+//////        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
+//////        simpleModule.addSerializer(Date.class,ToStringSerializer.instance);
+////        //将对象模型添加至对象映射器
+////        objectMapper.registerModule(simpleModule);
+////        jackson2HttpMessageConverter.setObjectMapper(objectMapper);
+////        //在转换器列表中添加自定义的Json转换器
+////        converters.add(jackson2HttpMessageConverter);
+////        //添加utf-8的默认String转换器
+////        converters.add(new StringHttpMessageConverter(Charset.forName("UTF-8")));
+////    }
+//
+//    @Bean
+//    @Primary
+//    @ConditionalOnMissingBean(ObjectMapper.class)
+//    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder)
+//    {
+//        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
+//
+//        // 通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化
+//        // Include.Include.ALWAYS 默认
+//        // Include.NON_DEFAULT 属性为默认值不序列化
+//        // Include.NON_EMPTY 属性为 空("") 或者为 NULL 都不序列化,则返回的json是没有这个字段的。这样对移动端会更省流量
+//        // Include.NON_NULL 属性为NULL 不序列化
+//        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
+//        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+//        // 允许出现特殊字符和转义符
+//        objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
+//        // 允许出现单引号
+//        objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
+//        // 字段保留,将null值转为""
+//        objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>()
+//        {
+//            @Override
+//            public void serialize(Object o, JsonGenerator jsonGenerator,
+//                                  SerializerProvider serializerProvider)
+//                    throws IOException
+//            {
+//                jsonGenerator.writeString("");
+//            }
+//        });
+//        return objectMapper;
 //    }
-
-    @Bean
-    @Primary
-    @ConditionalOnMissingBean(ObjectMapper.class)
-    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder)
-    {
-        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
-
-        // 通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化
-        // Include.Include.ALWAYS 默认
-        // Include.NON_DEFAULT 属性为默认值不序列化
-        // Include.NON_EMPTY 属性为 空("") 或者为 NULL 都不序列化,则返回的json是没有这个字段的。这样对移动端会更省流量
-        // Include.NON_NULL 属性为NULL 不序列化
-        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
-        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-        // 允许出现特殊字符和转义符
-        objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
-        // 允许出现单引号
-        objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
-        // 字段保留,将null值转为""
-        objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>()
-        {
-            @Override
-            public void serialize(Object o, JsonGenerator jsonGenerator,
-                                  SerializerProvider serializerProvider)
-                    throws IOException
-            {
-                jsonGenerator.writeString("");
-            }
-        });
-        return objectMapper;
-    }
-
-
-
-}
+//
+//
+//
+//}

+ 107 - 107
src/main/java/com/futu/course/common/intercepter/AuthIntercepter.java

@@ -1,108 +1,108 @@
-package com.futu.course.common.intercepter;
-
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.futu.course.common.annotation.NonLoginRequired;
-import com.futu.course.common.exception.RRException;
-import com.futu.course.common.utils.RedisUtil;
-import com.futu.course.common.utils.StringUtils;
-import com.futu.course.common.utils.TokenUtils;
-
-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.web.method.HandlerMethod;
-import org.springframework.web.servlet.HandlerInterceptor;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.lang.reflect.Method;
-
-@Component
-@Slf4j
-public class AuthIntercepter implements HandlerInterceptor {
-
-    @Autowired
-    protected RedisTemplate redisTemplate;
-
-    @Autowired
-    private RedisUtil redisUtil;
-
-    public final static String ACCESSTOKEN = "token";
-
-    public AuthIntercepter() {
-
-    }
-
-    public AuthIntercepter(RedisTemplate redisTemplate) {
-        this.redisTemplate = redisTemplate;
-    }
-
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
-            throws Exception {
-        //System.out.println("preHandle");
-        String deviceId = request.getHeader("deviceId");
-        String token = request.getHeader(ACCESSTOKEN);
-//        String time = request.getHeader("time");
-        log.info(request.getRequestURI());
-        //log.info("deviceId={},token={},time={}",deviceId,token,time);
-        try {
-
-            if (!(handler instanceof HandlerMethod)) {
-                return true;
-            }
-
-            HandlerMethod handlerMethod = (HandlerMethod) handler;
-
-            Method method = handlerMethod.getMethod();
-
-            NonLoginRequired loginRequired = method.getAnnotation(NonLoginRequired.class);
-            //有@LoginRequired注解,需要认证
-            if (loginRequired != null) {
-
-                return true;
-            }
-
-            log.info("---interceptertoken");
-            log.info(token);
-            if (StringUtils.isEmpty(deviceId)) {
-
-                //response.getWriter().print("");
-                log.info("*********************》deviceId错误");
-                throw new RRException("deviceId错误", 102);
-                //return false;
-            }
-            if (StringUtils.isEmpty(token)) {
-                log.info("*********************》token为空");
-                throw new RRException("token错误,请重新登录", 101);
-            }
-//            if (StringUtils.isEmpty(time)) {
-//                throw new RRException("时间错误", 103);
+//package com.futu.course.common.intercepter;
+//
+//
+//import com.alibaba.fastjson.JSON;
+//import com.alibaba.fastjson.JSONObject;
+//import com.futu.course.common.annotation.NonLoginRequired;
+//import com.futu.course.common.exception.RRException;
+//import com.futu.course.common.utils.RedisUtil;
+//import com.futu.course.common.utils.StringUtils;
+//import com.futu.course.common.utils.TokenUtils;
+//
+//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.web.method.HandlerMethod;
+//import org.springframework.web.servlet.HandlerInterceptor;
+//
+//import javax.servlet.http.HttpServletRequest;
+//import javax.servlet.http.HttpServletResponse;
+//import java.lang.reflect.Method;
+//
+//@Component
+//@Slf4j
+//public class AuthIntercepter implements HandlerInterceptor {
+//
+//    @Autowired
+//    protected RedisTemplate redisTemplate;
+//
+//    @Autowired
+//    private RedisUtil redisUtil;
+//
+//    public final static String ACCESSTOKEN = "token";
+//
+//    public AuthIntercepter() {
+//
+//    }
+//
+//    public AuthIntercepter(RedisTemplate redisTemplate) {
+//        this.redisTemplate = redisTemplate;
+//    }
+//
+//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
+//            throws Exception {
+//        //System.out.println("preHandle");
+//        String deviceId = request.getHeader("deviceId");
+//        String token = request.getHeader(ACCESSTOKEN);
+////        String time = request.getHeader("time");
+//        log.info(request.getRequestURI());
+//        //log.info("deviceId={},token={},time={}",deviceId,token,time);
+//        try {
+//
+//            if (!(handler instanceof HandlerMethod)) {
+//                return true;
 //            }
-
-            log.info("调用token**********************》");
-            log.info(token);
-            log.info("************************************》");
-            Long userId = TokenUtils.getUserId(token);
-            log.info("userId={}",userId);
-            Object obj = redisTemplate.opsForValue().get(Long.toString(userId));
-            if (obj == null) {
-                log.info("************************用户token不存在");
-                throw new RRException("token过期", 101);
-            }
-
-
-
-        } catch (RRException e) {
-            log.info("调用了异常通知" + e.getMessage());
-
-            throw e;
-        }
-
-        return true;
-    }
-
-
-}
+//
+//            HandlerMethod handlerMethod = (HandlerMethod) handler;
+//
+//            Method method = handlerMethod.getMethod();
+//
+//            NonLoginRequired loginRequired = method.getAnnotation(NonLoginRequired.class);
+//            //有@LoginRequired注解,需要认证
+//            if (loginRequired != null) {
+//
+//                return true;
+//            }
+//
+//            log.info("---interceptertoken");
+//            log.info(token);
+//            if (StringUtils.isEmpty(deviceId)) {
+//
+//                //response.getWriter().print("");
+//                log.info("*********************》deviceId错误");
+//                throw new RRException("deviceId错误", 102);
+//                //return false;
+//            }
+//            if (StringUtils.isEmpty(token)) {
+//                log.info("*********************》token为空");
+//                throw new RRException("token错误,请重新登录", 101);
+//            }
+////            if (StringUtils.isEmpty(time)) {
+////                throw new RRException("时间错误", 103);
+////            }
+//
+//            log.info("调用token**********************》");
+//            log.info(token);
+//            log.info("************************************》");
+//            Long userId = TokenUtils.getUserId(token);
+//            log.info("userId={}",userId);
+//            Object obj = redisTemplate.opsForValue().get(Long.toString(userId));
+//            if (obj == null) {
+//                log.info("************************用户token不存在");
+//                throw new RRException("token过期", 101);
+//            }
+//
+//
+//
+//        } catch (RRException e) {
+//            log.info("调用了异常通知" + e.getMessage());
+//
+//            throw e;
+//        }
+//
+//        return true;
+//    }
+//
+//
+//}

+ 76 - 0
src/main/java/com/futu/course/es/Service/ESCourseService.java

@@ -0,0 +1,76 @@
+package com.futu.course.es.Service;
+
+import com.futu.course.course.service.impl.CourseServiceImpl;
+import org.elasticsearch.action.search.SearchRequest;
+import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.index.query.BoolQueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.search.SearchHit;
+import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Map;
+
+/**
+ * @author "杨旭朋"
+ * @ClassName: ESCourseService
+ * @date 2025年05月06日 15:54
+ */
+@Service
+public class ESCourseService {
+    @Autowired
+    RestHighLevelClient client;
+    @Autowired
+    CourseServiceImpl courseService;
+    /**
+     * @title: search
+     * @desc:  ES搜索指引
+     * @params ( String name)
+     * @return: ArrayList<String>
+     * @author: 杨旭朋
+     * @date: 2025/5/6 16:29
+     */
+    public ArrayList<String> search(String name) throws IOException {
+        // 创建搜索请求
+        SearchRequest searchRequest = new SearchRequest("course");
+        // 创建搜索容器
+        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
+        // 创建布尔查询器
+        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
+                // 创建条件,在条件中添加 match 查询,使用 ik 分词器
+                .must(QueryBuilders.matchQuery("name", name));
+        // 设置查询的最大条数
+        searchSourceBuilder.size(10);
+        // 将搜索容器添加搜索条件
+        searchSourceBuilder.query(boolQueryBuilder);
+        // 添加数据为搜索容器
+        searchRequest.source(searchSourceBuilder);
+        // 执行请求,并获取响应
+        SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
+        System.out.println(searchRequest);
+        // 返回搜索结果
+        SearchHit[] hits = search.getHits().getHits();
+        ArrayList<String> list = new ArrayList<>();
+        for (SearchHit hit : hits) {
+            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
+            list.add((String) sourceAsMap.get("name"));
+        }
+        return list;
+    }
+    /**
+     * @title: MysqlInterES
+     * @desc:  将mysql中的数据与mysql进行同步
+     * @params ()
+     * @return: Result
+     * @author: 杨旭朋
+     * @date: 2025/5/6 16:50
+     */
+    public void MysqlInterES(){
+
+    }
+}

+ 28 - 0
src/main/java/com/futu/course/es/controller/ESCourseController.java

@@ -0,0 +1,28 @@
+package com.futu.course.es.controller;
+
+import com.futu.course.es.Service.ESCourseService;
+import org.elasticsearch.search.SearchHit;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+/**
+ * @author "杨旭朋"
+ * @ClassName: ESCourseController
+ * @date 2025年05月06日 15:54
+ */
+@RestController
+@RequestMapping("/EsCourse")
+public class ESCourseController {
+    @Autowired
+    ESCourseService esCourseService;
+    @PostMapping("/search")
+    public ArrayList<String> search(@RequestParam("name") String name) throws IOException {
+      return esCourseService.search(name);
+    }
+}

+ 38 - 0
src/main/java/com/futu/course/es/domain/ESCourse.java

@@ -0,0 +1,38 @@
+package com.futu.course.es.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.elasticsearch.annotations.Document;
+import org.springframework.data.elasticsearch.annotations.Field;
+import org.springframework.data.elasticsearch.annotations.FieldType;
+import org.springframework.data.mongodb.core.mapping.MongoId;
+
+import java.util.Date;
+
+/**
+ * 课程表
+ */
+@Data
+// 对 ES 中的 course 进行映射
+@Document(indexName = "course")
+@NoArgsConstructor
+@AllArgsConstructor
+public class ESCourse {
+    // 用于 Elasticsearch 的主键注解
+    @Id
+    // 用于 MongoDB 的主键注解
+    @MongoId
+    @Field(type = FieldType.Long)
+    private Long id;
+
+    @Field(name = "name", type = FieldType.Text, analyzer = "ik_max_word")
+    private String name;
+
+    @Field(name = "uid", type = FieldType.Long)
+    private Long uid;
+
+    @Field(name = "create_time", type = FieldType.Date, format = {}, pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+}

+ 3 - 0
src/main/resources/application.yml

@@ -12,3 +12,6 @@ spring:
     database: 0
     port: 6379
     password:
+  elasticsearch:
+    rest:
+      uris: http://localhost:9200