2023年10月31日 星期二

cors

 

報錯問題如下

Access to XMLHttpRequest at 'http://localhost:63110/system/dictionary/all' from origin 'http://localhost:8601' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

從http://localhost:8601訪問http://localhost:63110/system/dictionary/all被CORS policy阻止,因為沒有Access-Control-Allow-Origin 頭信息。CORS全稱是 cross origin resource share 表示跨域資源共享。

出這個提示的原因是基於瀏覽器的同源策略,去判斷是否跨域請求,同源策略是瀏覽器的一種安全機制,從一個地址請求另一個地址,如果協議、主機、端口三者全部一致則不屬於跨域,否則有一個不一致就是跨域請求。

比如:

從http://localhost:8601  到   http://localhost:8602  由於端口不同,是跨域。

從http://192.168.101.10:8601  到   http://192.168.101.11:8601  由於主機不同,是跨域。

從http://192.168.101.10:8601  到   https://192.168.101.10:8601  由於協議不同,是跨域。


註意:服務器之間不存在跨域請求。

瀏覽器判斷是跨域請求會在請求頭上添加origin,表示這個請求來源哪裏。

比如:

GET / HTTP/1.1
Origin: http://localhost:8601


服務器收到請求判斷這個Origin是否允許跨域,如果允許則在響應頭中說明允許該來源的跨域請求,如下:
Access-Control-Allow-Originhttp://localhost:8601

如果允許任何域名來源的跨域請求,則響應如下:
Access-Control-Allow-Origin*

目前~簡易解法就是在所有的響應頭上加

 Access-Control-Allow-Origin*




import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

/**
 * @description: 跨域過慮器
 * @author: Ian Wang
 * @date: 2023/10/31 上午 10:38
 * @version: 1.0
 */
@Configuration
public class GlobalCorsConfig {
    /**
     * 允許跨域調用的過濾器
     */
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        //允許白名單域名進行跨域調用
        config.addAllowedOrigin("*");
        //允許跨越發送cookie
        config.setAllowCredentials(true);
        //放行全部原始頭信息
        config.addAllowedHeader("*");
        //允許所有請求方法跨域調用
        config.addAllowedMethod("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}

2023年10月28日 星期六

使用idea運作vue專案

 首先先用idea打開一個vue專案






配置一下nodejs及npm路徑










在專案中找到package.json

這個相當於maven專案的pom文件, 用來管理前端的依賴

在上面點取Show npm Scripts





就能看到以下視窗









點serve右鍵 Run serve

(在run 之前須在專案根目錄打npm run install 不然會報

vue-cli-service不是内部或外部命令)

只要出現以下畫面說明啟動成功





就可以打開瀏覽器看一下~~

專案中node_modules本身相當於maven本地倉庫

裡面都是依賴的包, 刪除後 重新編譯, 他也會自動下載







2023年10月26日 星期四

使用httpclient

在idea可下載工具中有httpclient

其功用很像是postman或是swagger

他的功用上, 一方面能保存測試數據, 另外一方面又比postman吃的資源少

同時因其在idea裡面, 使用上還算方便

下列簡略介紹

可以創一個資料夾專門放這些測試

裡面命名用.http結尾, 內容為以下

需要有content type, 然後~格一行可以寫requestbody

點選綠色箭頭就可以run

另外一部分可以設置環境變數, 像{{content_host}}

然後創建一個env檔案ex http-client.env.json

然後內容

{
"dev": {
"access_token": "",
"gateway_host": "localhost:63010",
"content_host": "localhost:63040",
"system_host": "localhost:63110",
"media_host": "localhost:63050",
"search_host": "localhost:63080",
"auth_host": "localhost:63070",
"checkcode_host": "localhost:63075",
"learning_host": "localhost:63020"
}
}
這樣就可以選run with 'dev' environment








2023年10月24日 星期二

從資料庫產生entity&mapper

mybatis-plus的generatort生成工具 
生成 PO類、Mapper接口、Mapper的xml文件 

來源
 https://github.com/baomidou/generator 

將xuecheng-plus-generator.zip解壓後複製到專案的根目錄 如下














在專案中找到pom檔案, 點選右鍵add as maven project
才能使用















在這包中找到ContentCodeGenerator類別














TABLE_NAMES後面可以指定要生成的數據表











資料庫連線, 則是在下面程式碼中做配置








然後就可以run這個application, 產生結果會在和generator同層的包 content中
裡面包含controller, mapper, model 還有service







2023年10月17日 星期二

全局date time

 當回應的日期格式中有T還有毫秒的時候














或許我們會思考如何改它的格式

有一個方法, 可以做全局的統一



@Configuration
public class LocalDateTimeConfig {

    /*
     * 序列化内容
     *   LocalDateTime -> String
     * 服务端返回给客户端内容
     * */
    @Bean
    public LocalDateTimeSerializer localDateTimeSerializer() {
        return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }

    /*
     * 反序列化内容
     *   String -> LocalDateTime
     * 客户端传入服务端数据
     * */
    @Bean
    public LocalDateTimeDeserializer localDateTimeDeserializer() {
        return new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }


    // 配置
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> {
            builder.serializerByType(LocalDateTime.class, localDateTimeSerializer());
            builder.deserializerByType(LocalDateTime.class, localDateTimeDeserializer());
        };
    }

}

透過上面的方式, 就能統一格式

結果:

[leetcode] [KMP] KMP

ABCDABD... ABCDABF... 簡單的說, 傳統解兩字串匹配部分 可能會來個雙迴圈, 哀個比對, 當不匹配的時候, 會將下方列再後移1位 然後不匹配再後移 然而 如果像上放已經有4個屬於匹配的字串, 她就應該直接往後移四位來匹配, 而不是只移動1位 隱藏的思維是, 當...