javascript
使用AWS Elastic Beanstalk轻松进行Spring Boot部署
朋友不允許朋友寫用戶身份驗證。 厭倦了管理自己的用戶? 立即嘗試Okta的API和Java SDK。 在幾分鐘之內即可對任何應用程序中的用戶進行身份驗證,管理和保護。
幾乎所有應用程序都依賴于身份驗證。 開發人員以及雇用他們的公司都想確認誰在發出請求,他們是誰。 而且,這需要足夠快地進行以實現良好的用戶體驗。 幸運的是,有很棒的工具可以提供幫助。
具有Spring Security的Spring Boot是基于Java的Web開發的絕佳解決方案。 使用相對較少的代碼,開發人員可以輕松,安全地實現,測試,更新和擴展身份驗證方案。
在本教程中,您將在Spring Boot中使用OAuth 2.0 / OpenID Connect和Okta作為OAuth提供程序構建一個非常簡單的“ Hello World”應用程序。 它將使用AWS作為云提供商,并通過AWS Elastic Beanstalk進行部署。
為什么選擇AWS Elastic Beanstalk?
在云基礎架構提供商方面,AWS一直是市場的領導者,其服務使部署云應用程序變得快速而輕松。 Elastic Beanstalk是一項部署和配置服務,通過自動化在AWS基礎設施上設置應用程序的過程,您只需單擊幾下即可部署整個基礎設施。 此外,它還通過自動置備,負載平衡,自動擴展和運行狀況監視來幫助管理應用程序的資源利用率。
創建一個Spring Boot應用程序
在開始云部署之前,您將需要應用程序本身。 您的應用的第一個版本將有一個簡單的頁面,其中將顯示Hello, {user}! 如果輸入用戶名,否則它將顯示Hello, World! 除此以外。 您將使用Spring MVC和Thymeleaf來完成任務。
Thymeleaf是服務器端模板引擎。 它允許您在客戶端的Web瀏覽器中呈現之前,將服務器參數傳遞給HTML。
您可以從頭開始創建項目嗎? 可以,但是您不需要。 您可以改用Spring Initializr。 這將幫助您生成需要的所有依賴項的項目。
轉到Spring Initializr網站 ,然后輸入以下信息:
- Project: Maven Project - Language: Java - Group: com.okta - Artifact: hello-world - Dependencies: Spring Web Starter, Thymeleaf您可以選擇使用Maven或Gradle生成項目。 本教程顯示了使用Maven的步驟,但是您可以在Gradle上輕松地遵循它。
提供信息后,單擊生成項目 。 該站點將生成一個zip文件,您可以下載并解壓縮該文件。 在您最喜歡的IDE中打開項目,一切順利!
創建網頁
使用Spring MVC,您需要創建一個Controller來表示網頁。 它將映射到端點/hello ,還映射到/ ,它代表主頁。 它返回hello-world模板作為響應。
創建類HelloWorldController :
@Controller public class HelloWorldController {@GetMapping({"/", "hello"})public String helloWorld(@RequestParam(required = false, defaultValue = "World") String name, Model model) {model.addAttribute("name", name);return "hello-world";} }到目前為止,一切都很好。 接下來,創建html模板。 但是,此模板是什么? 你為什么需要它?
模板是Spring MVC用于在用戶瀏覽器中呈現信息HTML頁面。
您定義Thymeleaf HTML頁面以接收model對象中定義的所有屬性。
在src\main\resources\templates ,創建文件hello-world.html :
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"><body><h1 th:text="'Hello, ' + ${name} + '!'"></h1></body> </html>這將創建一個HTML頁面,該頁面在正文中顯示<h1>標記以及問候消息。 ${name}屬性不是本地HTML,它是Thymeleaf的一部分,從model對象接收值,以在將信息發送到瀏覽器之前呈現信息。
現在,您已經創建了控制器和模板,可以運行它,看看它是否有效! 打開HelloWorldApplication類,然后執行main方法。
或者,從命令行執行:
./mvnw spring-boot:run如果您在網絡瀏覽器中轉到http:// localhost:8080 / ,則會看到以下消息:
Hello, World!如果需要自定義消息,則可以添加name參數。 例如, http:// localhost:8080 /?name = Daniel將返回:
Hello, Daniel添加Spring Security
談到SaaS,開發人員希望確保其應用程序安全。 用戶不應看到其他用戶的數據。
Spring Security處理身份驗證,授權和其他安全方面。 要將其添加到您的項目中,請轉到pom.xml文件,然后在<dependencies>標記內添加以下代碼:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency>而已! 當您將Spring Security添加為依賴項時,默認情況下會啟用安全性。 當您嘗試訪問端點時,必須先登錄才能繼續。
讓我們測試一下。 運行該應用程序,然后轉到http:// localhost:8080 / 。 您將看到以下結果:
如預期的那樣,現在它將您重定向到登錄頁面,該頁面將要求用戶名和密碼。 您現在必須問自己:我應該使用哪個用戶名和密碼?
默認用戶名是user 。 Spring無需設置默認密碼,而是在每次應用程序啟動時更改它。 您可以通過查看應用程序日志來查看當前的日志。 尋找這樣的東西:
Using generated security password: 29aa0d09-eaca-47ae-bcad-e5b22affd466在實際的應用程序中,此行為不是您想要的。 用戶期望密碼保持不變,除非他們自己更改。 讓我們添加一個配置來實現它。
創建類SecurityConfiguration :
@EnableWebSecurity public class SecurityConfiguration extends WebSecurityConfigurerAdapter {private PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().passwordEncoder(passwordEncoder()).withUser("john.doe").password(passwordEncoder().encode("secret")).roles("USER");}@Beanpublic PasswordEncoder passwordEncoder() {return passwordEncoder;} }上面的類擴展了WebSecurityConfigurerAdapter ,并允許您更改身份驗證管理方法。 在此示例中,您創建了一個用戶,但是您可以創建任意數量的用戶。 只需在第一個之后添加一個新的withUser調用即可。
現在,用戶已通過您的應用程序身份驗證,您不再需要輸入用戶名。 而是,您將基于當前用戶顯示信息。 在HelloWorldController內部,在代碼中進行以下更改:
@Controller public class HelloWorldController {@GetMapping({"/", "hello"})public String helloWorld(Model model, Principal principal) {model.addAttribute("name", principal.getName());return "hello-world";} }Principal界面存儲當前用戶的名稱。 Spring Security處理繁瑣的工作:您只需將其添加為參數,該方法將接收正確的值。
要查看此更改,請停止應用程序并再次運行。 如果您訪問http:// localhost:8080 / ,它將要求您再次登錄。 使用john.doe作為用戶名secret作為密碼。 提交信息后,您將看到以下文本:
Hello, john.doe!現在您可以在云中部署應用程序了!
將應用程序部署到AWS Elastic Beanstalk
要部署服務,您將使用AWS Elastic Beanstalk。 如果您沒有AWS賬戶,請在此處創建一個賬戶。
登錄到AWS控制臺后 ,轉到服務,然后在搜索中鍵入Elastic Beanstalk 。 單擊它,它會將您重定向到“歡迎”頁面。 單擊入門按鈕,開始在云中創建您的應用程序。 您將看到以下屏幕:
在這里,您將創建一個Web應用程序。 在上面的字段中輸入以下信息:
Application name: hello-world Platform: Java Application code: Upload Your code在上傳代碼之前,您需要將其導出為JAR文件。 進入您的應用程序文件夾,然后鍵入以下命令:
./mvnw package -DskipTests運行后,將文件hello-world-0.0.1-SNAPSHOT.jar上傳到target文件夾下。
上傳完成后,單擊“ Create application按鈕。 AWS將開始創建環境,顯示該過程中發生的情況的日志。
設置環境后,AWS會將您重定向到儀表板。 在信息中心菜單上方,您會找到用于訪問該應用程序的URL。 在新標簽頁中將其打開,它將加載您的網頁。
現在,您會收到502錯誤響應,這是預期的。 默認情況下,Elastic Beanstalk在端口5000上運行應用程序,而Spring Boot在端口8080上運行。讓我們指導您的應用程序在端口5000上運行以解決此問題。
單擊配置儀表盤菜單。 您將看到以下屏幕:
您可以在環境中更改許多變量和功能:添加負載平衡器,增加實例數量,或在這種情況下添加環境變量。
轉到軟件卡,然后單擊“ 修改” 。 查找Environment properties ,并將以下值添加到列表中:
SERVER_PORT : 5000
更改后,單擊“ 應用”按鈕,然后等待AWS在環境中應用更改。 當消息Environment update completed successfully. 出現時,再次打開URL。
現在工作了! 輸入您在代碼中定義的用戶名和密碼john.doe和secret 。 然后它將重定向到hello頁面,該頁面將向您顯示與本地環境相同的結果:
Hello, john.doe!如果遇到問題,您可以隨時檢查日志。
- 在菜單中,單擊Logs ,這會將您重定向到以下頁面:
- 轉到Request Logs > Full Logs 。 這將生成一個包含您所有環境日志的zip文件
- 下載并解壓縮文件
- 轉到var/log/rotated
- 在那邊,您會從您的應用程序中找到另一個zip文件。 解壓縮它,然后打開解壓縮的文件以查看應用程序日志
到目前為止一切正常嗎? 恭喜,您的第一個Spring Boot應用程序已在云中運行! 太好了,不是嗎? 但是,等等,在慶祝之前,您還有很多工作要做。
使您的應用安全生產就緒
還記得您創建了一個用戶并將憑據放入代碼中嗎? 此策略可能適用于測試目的,但對于實際應用而言,這是一個巨大的難題。
處理身份管理不是一件容易的事,您將要使用服務而不是“自己動手”。
Okta是出色的身份管理服務,可立即提供身份提供者,身份驗證,授權和用戶安全性。 讓我們配置您的應用程序以使用它。
- 創建一個Okta帳戶
- 登錄到您的帳戶
- 點擊應用
- 單擊添加應用程序
- 選擇Web ,然后單擊下一步按鈕。
- 在表單中填寫以下選項:
將${BEANSTALK_URL}更改${BEANSTALK_URL}您的AWS環境URL。 例如,我的值是HelloWorld-env.t3z2mwuzhi.us-east-1.elasticbeanstalk.com 。
大! 您將本地和生產環境列入了白名單。 如果您從他們的Okta應用程序中調用,它將允許該請求。
使用Okta和OAuth 2.0保護應用程序安全
在Okta中使用您的應用程序,您需要更改代碼才能開始使用它。 Okta從現在開始為您處理身份驗證。
用okta依賴項替換pom.xml文件中的Spring Security依賴項,該文件本身包括Spring Security。 將以下代碼放入<dependencies>標記內:
<dependency><groupId>com.okta.spring</groupId><artifactId>okta-spring-boot-starter</artifactId><version>1.2.1</version> </dependency>該庫將處理您的應用程序與Okta之間的通信。 您要做的就是識別您的Okta信息。 在本地設置以下環境變量:
OKTA_OAUTH2_ISSUER={ORG_URL}/oauth2/default OKTA_OAUTH2_CLIENT_ID={CLIENT_ID} OKTA_OAUTH2_CLIENT_SECRET={CLIENT_SECRET}大! 您將本地和生產環境列入了白名單。 如果您從這些地方調用Okta應用程序,它將允許該請求。
您的{ORG_URL}將顯示在Okta儀表板中,只需單擊菜單中的“ Dashboard ”即可。 您將在右上角看到組織URL。
您可以在Okta應用程序中找到{CLIENT_ID}和{CLIENT_SECRET} :
- 在Okta的菜單中,轉到“ Applications
- 選擇hello-world應用程序
- 單擊General選項卡
- 向下滾動到Client Credentials
在這里,您會看到客戶端ID和密碼。
通過這些更改,您現在可以通過OpenID Connect進行身份驗證。 當用戶轉到主頁時,您的應用程序會將其重定向到Okta登錄頁面,然后返回到網頁。
OpenID Connect是OAuth 2.0授權框架之上的一個薄層,專注于身份和身份驗證。
使用OpenID Connect,您需要更改接收經過身份驗證的用戶的方式。 轉到HelloWorldController類并更新代碼:
@Controller public class HelloWorldController {@GetMapping({"/", "hello"})public String helloWorld(Model model, @AuthenticationPrincipal OidcUser user) {model.addAttribute("name", user.getGivenName());return "hello-world";} }這仍然使用模型將身份驗證信息傳遞給Thymeleaf,但是從使用Principal轉變為使用OidcUser 。 這使您可以檢索所需的任何屬性。 在此示例中,我們需要given_name屬性。
注意:由于您使用Okta進行身份驗證,因此您不再需要舊的配置。 繼續并刪除SecurityConfiguration類。
讓我們運行該應用程序! 再次啟動它,然后轉到http:// localhost:8080 / 。 注意,您已重定向到Okta登錄頁面:
如果提供用戶名和密碼,則將您重定向到/端點。 就我而言,我將看到以下消息:
Hello, Daniel!現在您有了一個安全的Web應用程序! 最好的部分:您不必擔心自己實施身份驗證。
在AWS Elastic Beanstalk上重新部署應用程序
您有一個可用于生產的應用程序,因此讓我們將其發送到您的生產環境! 登錄到AWS控制臺 ,然后轉到您的Elastic Beanstalk環境 。
- 選擇在先前步驟中創建的環境。
- 在菜單中,單擊Configuration
- 按Software卡內的Modify按鈕。
添加您在本地環境中使用的相同環境變量:
OKTA_OAUTH2_ISSUER={ORG_URL}/oauth2/default OKTA_OAUTH2_CLIENT_ID={CLIENT_ID} OKTA_OAUTH2_CLIENT_SECRET={CLIENT_SECRET}進行更改后,單擊“ Apply 。
最后一步是將應用程序更新到最新版本。 進入項目文件夾,然后鍵入:
./mvnw package -DskipTests此命令使用您的應用程序的當前版本生成一個JAR文件。 轉到AWS Elastic Beanstalk儀表板,然后單擊上Upload and deploy按鈕。 選擇創建的aven文件(例如hello-word-0.0.1-SNAPSHOT.jar ),然后單擊Deploy按鈕。
為確保其正常運行,請單擊AWS Elastic Beanstalk URL。 如果您尚未登錄,它將把您重定向到Okta的登錄名。當您輸入有效的憑據時,它將把您重定向到Hello World頁面! 就我而言,結果將是:
Hello, Daniel!恭喜你! 您已在云中部署了應用程序并以正確的方式處理了安全性。
如果您想看一下代碼,可以在此處找到帶有示例的存儲庫。
您是否想全面了解有關安全性,OAuth 2.0和Spring的更多信息? 我們建議這些職位:
- 使用Spring Security進行簡單身份驗證
- 通過Spring Boot和OAuth 2.0輕松進行單點登錄
與往常一樣,在下面留下評論,不要忘記在Twitter上關注我們并訂閱我們的YouTube頻道。
“使用AWS Elastic Beanstalk輕松進行Spring Boot部署”最初于2019年8月7日發布在Okta Developer Blog上。
朋友不允許朋友寫用戶身份驗證。 厭倦了管理自己的用戶? 立即嘗試Okta的API和Java SDK。 在幾分鐘之內即可對任何應用程序中的用戶進行身份驗證,管理和保護。
翻譯自: https://www.javacodegeeks.com/2019/09/easy-spring-boot-deployment-aws-elastic-beanstalk.html
總結
以上是生活随笔為你收集整理的使用AWS Elastic Beanstalk轻松进行Spring Boot部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开启端口的命令(开启端口 linux)
- 下一篇: 微信5.0安卓版下载安装(微信5.0安卓