廣告聯播

2020年1月8日 星期三

Spring Boot Internationalization 多語系設置(國際化)

From: Polin Wei

Spring Boot 多語系設置(國際化 Internationalization )



Spring Boot 支援多語系(國際化)的網頁顯示,這在國際化的軟體或公司是必需具備的,要達成這個功能只需要簡單的幾個步驟即可以達到。在 Spring Boot 在 Eclipse 的安裝與設定 最後中,有建議安裝 ResourceBundle Editor 的插件,在此也會用到,不妨先安裝於 Eclipse 中。
  • LocaleResolver
為了讓應用程式能夠確定當前正在使用的語言環境,需要在 class: WebMvcConfig 中添加一個 @Bean(name = "localeResolver") ,記得要設定 name = "localeResolver",不然會出現HTTP Status 500 – Internal Server Error 的錯誤訊息。
  1. /**
  2. * 多語系設定
  3. * @return
  4. */
  5. @Bean(name = "localeResolver")
  6. public LocaleResolver getLocaleResolver() {
  7. CookieLocaleResolver cookieLocaleResolver= new CookieLocaleResolver();
  8. cookieLocaleResolver.setCookieHttpOnly(true);
  9. cookieLocaleResolver.setDefaultLocale(Locale.US);
  10. cookieLocaleResolver.setCookieName("appsLocaleCookie");
  11. cookieLocaleResolver.setCookieMaxAge(60*60);
  12. return cookieLocaleResolver;
  13. }
這裡是使用 CookieLocaleResolver ,所以會在用戶端的電腦建立一個 Cookie 的檔案來存放 appsLocaleCookie 的值,若不想要這麼作,那可以用 SessionLocaleResolver 

2020年1月4日 星期六

spring boot minify html

From: Polin Wei

Spring Boot 利用 Filter 與 htmlcompressor 最小化 HTML 網頁Size


在 WordPress 利用 gzip 與外掛提升網站速度 中提到,可以將網頁的空白去除,以達到網頁最小的 Size ,進而提升載入網頁的速度,而在 Spring boot 中也可以透過 javax.servlet.Filter 及使用 com.googlecode.htmlcompressor 來達到這個功能。

  • 攔截器 ( Interceptor )  與 篩選器 ( Filter )
在實作之前,我們先瞭解一下攔截器 ( Interceptor )  與篩選器 ( Filter ) 。這兩者在功能方面很類似,但是在具體技術實現方面,還是有差異的,兩者的主要區別包括以下幾個方面:
  1. Filter 是依賴於 Servlet 容器,屬於 Servlet 規範的一部分,而攔截器則是獨立存在的,可以在任何情況下使用。
  2. Filter 的執行由 Servlet 容器 FilterChain 完成,而攔截器通常通過動態代理的方式來執行。
  3. Filter 的生命週期由 Servlet 容器管理,而攔截器則可以通過 IoC (Inversion of Control) 容器來管理,因此可以通過注入等方式來獲取其他 Bean 的實例,因此使用會更方便。

瞭解兩者差異後,接下來透過下列幾個步驟就可以輕易達到這個功能。
  • 在 gradle 中加入 com.googlecode.htmlcompressor 相依套件
  1. compile("com.googlecode.htmlcompressor:htmlcompressor:1.5.2")

2020年1月1日 星期三

Spring Boot 身份認證 (Authentication) 使用資料庫 (Database)

From: Polin Wei

在 Spring Boot 客製化 登入 ( Login ) 與 認證 (Authenticate) 機制中我們使用固定的帳號來作身份認證 (authentication),但在實務上這並不實用,因為不可能增加或減少帳號,就來修改程式,最好的方法就是將帳號維護於資料庫 (Database) 內,這樣就可以方便管理者作日常維護了。

這裡要實作 org.springframework.security.core.userdetails.UserDetails ,其中主要的重點是透過  public Collection getAuthorities() 提供 Authorities,在 JPA (Java Persistence API) Many-To-Many Relationship 在 Model 上的設置 已經取得帳號所有的 Authority,再利用 mapToGrantedAuthorities(Set authorities) 轉換成 Spring Security 需要的 Authorities 格式即可

  1. @Override
  2. public Collectionextends GrantedAuthority> getAuthorities() {
  3. return mapToGrantedAuthorities(getRoles());
  4. }
  5. private static List mapToGrantedAuthorities(Set authorities) {
  6. return authorities.stream()
  7. .map(Authority -> new SimpleGrantedAuthority("ROLE_" + Authority.getName()))
  8. .collect(Collectors.toList());
  9. }
至於 isAccountNonExpired()isCredentialsNonExpired()isEnabled() 則可以使用 active_date & inactive_date 來作判斷即可。


繼續閱讀:  Spring Boot 身份認證 (Authentication) 使用資料庫 (Database) 

2019年12月29日 星期日

Spring Boot 啟用 gzip 及 cache 提升網站速度

From: Polin Wei

WordPress 利用 gzip 與外掛提升網站速度 中有提到設定 gzip 壓縮,可以減少在主機與使用者端之間,資料傳輸量的減少,進而提升網站回應的速度,它的方法原則上是利用修改 .htaccess 的設定來達成,而 Spring Boot 是一個非常功能強大且靈活的系統,有很多功能只要透過設定就可以達成,在 gzip 的功能上只要在 application.properties 加上下列設定即可。


  1. # =================================
  2. # GZip compression, HTTP/2, caching
  3. # =================================
  4. # Enable response compression
  5. server.compression.enabled=true
  6. # The comma-separated list of mime types that should be compressed
  7. server.compression.mime-types=text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xml
  8. # Compress the response only if the response size is at least 1KB
  9. server.compression.min-response-size=1024

2019年12月14日 星期六

Spring Boot SSL Certificate Configure

From: Polin Wei

文章中 Spring Boot 客製化 登入 ( Login ) 與 認證 (Authenticate) 機制 建立了一個需要認證的網站,既然要輸入帳號/密碼,那麼就應該要有 SSL 憑證的保護。Spring Boot 在套件 spring-boot-starter-web 裡,已有配置 Tomcat 伺服器,可利用 使用 Let’s Encrypt 取得 SSL 來設定 HTTPS 並強制使用 SSL 安全加密協定 裡申請的免費SSL憑證,來強化網站安全。

  1. 產生 Spring Boot 裡 Tomcat 必要的 jks 檔案
  2. Spring boot 裡 application.properties 檔案內容
  3. Spring Boot 讓 HTTP 強制轉換到 HTTPS
  4. keytool Options 參數說明

  • 產生 Spring Boot 裡 Tomcat 必要的 jks 檔案

要產生 Spring Boot 裡 Tomcat 必要的 jks 檔案,需要 利用 Apache 的 Virtual Host 功能來架設虛擬網站 文章提到 XAMPP 裡的 openssl 協助,以及 Spring Boot 在 Eclipse 的安裝與設定 裡的 OpenJDK ,從 使用 Let’s Encrypt 取得 SSL 來設定 HTTPS 並強制使用 SSL 安全加密協定 取的免費SSL憑證,會有三個檔案:private.keycertificate.crtca_bundle.crt ,使用的指令如下

2019年12月9日 星期一

WordPress 網站搬移到新網址該做那些事呢?

From: Polin Wei


主要有下列幾個步驟:
  1. Upload your website to new host
  2. Export/Import Your WordPress Database
  3. Modify two records: siteurl & home on table: wp_options
  4. Modify wp-config.php File
  5. Change all the URL of guid & post content in the posts

  • Upload your website to new host
先找到安裝 WordPress 的根目錄
wordpress-root

然後將 WordPress 安裝目錄下的所有檔案如下圖,整個上傳到新網站的根目錄下。(可以使用 FileZilla 來上傳)

2019年12月3日 星期二

WordPress 安裝與網站基本設定

From: Polin Wei

WordPress WordPress是一個以PHP和MySQL為平臺的自由開源的 Blog 部落格軟體和內容管理系統。WordPress具有外掛程式架構和範本系統,更可以透過 HOOK 的規範加入自己的客製程式。截至2018年4月,排名前1000萬的網站中超過30.6%使用WordPress。WordPress是最受歡迎的網站內容管理系統。很多虛擬主機或雲端網站都有提供免費的 WordPress 佈建軟體供自行建置屬於自己的部落格,本站則是先個人電腦安裝並設置後才上載到雲端網站,整個WordPressordPress建站的過程如下:
  1. 設定 DNS 與安裝 WordPress
  2. WordPress 網站基本的設定
  3. WordPress 佈景主題安裝與設定
  4. WordPress 實用外掛推薦
  5. WordPress 網站狀態檢查
  • 設定 DNS 與安裝 WordPress
若想要建置一個專屬自己的部落格,雖然可以在 Google 的 Blogspot 如: 我的工作日記 或是 痞客邦 如: MISTECH 技術手抄本 中申請免費的空間,但免費的資源總是會有限制,因此, 若想要一個完全可以屬於自己可以操控的網站,那麼就必需購買一個網域及一個主機。