亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

[譯]Spring入門 - Web應(yīng)用程序安全

AlexTuan / 3175人閱讀

摘要:一旦最基本的應(yīng)用創(chuàng)建好了,你可以給他加上安全防護(hù)。一旦成功登出了,我們的應(yīng)用程序重定向到到并顯示相應(yīng)的登陸成功的消息。這標(biāo)記該應(yīng)用程序是一個(gè)應(yīng)用程序,并激活一些關(guān)鍵行為,比如創(chuàng)建一個(gè)。一旦應(yīng)用程序啟動(dòng),用瀏覽器訪問。

原網(wǎng)頁 https://spring.io/guides/gs/securing-web/

本指南將引導(dǎo)您完成創(chuàng)建一個(gè)資源由Spring Security的保護(hù)的一個(gè)簡(jiǎn)單的Web應(yīng)用程序的過程。

你將構(gòu)建

你將構(gòu)建一個(gè)通過固定的用戶列表作為后端的登錄表單來保護(hù)頁面安全的Spring MVC應(yīng)用程序

你將需要

大約15分鐘

一個(gè)喜歡的文本編輯器或IDE

JDK 1.8 或更高版本

Gradle 2.3+ 或 Maven 3.0+

你同樣可以將本指南的代碼直接導(dǎo)入Spring Tool Suite (STS)并從這里開始你的工作

如何完成這個(gè)指南

如同大多數(shù)的Spring入門指南,你可以從頭開始并完成每一個(gè)步驟,或者可以跳過這個(gè)你已經(jīng)熟悉的基本配置過程。無論哪種方式,您最終會(huì)獲得可運(yùn)行的代碼。

要從頭開始,請(qǐng)看“使用gradle構(gòu)建”部分。

要跳過最基本的部分,按下面的步驟操作:

下載然后解壓本項(xiàng)目的代碼,或者使用Git克隆一個(gè)代碼倉(cāng)庫(kù):
git clone https://github.com/spring-guides/gs-securing-web.git

cd 到 gs-securing-web/initial 目錄

直接跳到“部署Spring Security”

使用gradle構(gòu)建

首先,你要?jiǎng)?chuàng)建一個(gè)基本的構(gòu)建腳本。你可以使用任何你喜歡的構(gòu)建系統(tǒng)來構(gòu)建Spring應(yīng)用程序,但是你所需要的Gralde和Maven構(gòu)建代碼已經(jīng)包含在這里了。如果你對(duì)兩者都不熟悉,可以參考“使用Gradle構(gòu)建Java項(xiàng)目”或“使用Maven構(gòu)建Java項(xiàng)目”。

創(chuàng)建目錄結(jié)構(gòu)

你需要在你選的一個(gè)用作項(xiàng)目目錄的文件夾中,創(chuàng)建下面的子目錄結(jié)構(gòu);例如你可以在*nix系統(tǒng)中使用mkdir -p src/main/java/hello這樣的命令來完成。

└── src
    └── main
        └── java
            └── hello
創(chuàng)建Gradle的build文件

下面是initial目錄下的Gradle的build文件(譯注:實(shí)際這個(gè)initial指的是項(xiàng)目的根目錄,它包含了上面所創(chuàng)建的src目錄,以及gradle.build文件,這樣執(zhí)行gradle build命令時(shí),gradle才能正確地找到要構(gòu)建的代碼)。

文件名:build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.5.RELEASE")
    }
}

apply plugin: "java"
apply plugin: "eclipse"
apply plugin: "idea"
apply plugin: "spring-boot"

jar {
    baseName = "gs-securing-web"
    version =  "0.1.0"
}

repositories {
    mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile("org.springframework.boot:spring-boot-starter-thymeleaf")
    testCompile("junit:junit")
}

task wrapper(type: Wrapper) {
    gradleVersion = "2.3"
}
使用maven構(gòu)建

略,請(qǐng)參考原文

使用IDE構(gòu)建

略,請(qǐng)參考原文

創(chuàng)建一個(gè)不安全的Web應(yīng)用

在你可以嘗試將安全性應(yīng)用于Web應(yīng)用之前,你需要一個(gè)用于“保護(hù)”的Web應(yīng)用程序。本節(jié)中的步驟指導(dǎo)您完成創(chuàng)建一個(gè)非常簡(jiǎn)單的Web應(yīng)用程序。然后你將在下一節(jié)使用Spring Security將其保護(hù)起來。

這個(gè)web應(yīng)用程序包括兩個(gè)簡(jiǎn)單的視圖,一個(gè)是“主頁”,一個(gè)是“Hello World”頁?!爸黜摗钡囊晥D由下面這個(gè)themeleaf模板來定義:

文件名:src/main/resources/templates/home.html



    
        Spring Security Example
    
    
        

Welcome!

Click here to see a greeting.

如你所見,這個(gè)簡(jiǎn)單的視圖包括一個(gè)指向“/hello”頁面的鏈接,它由下面這個(gè)themeleaf模板來定義:

src/main/resources/templates/hello.html



    
        Hello World!
    
    
        

Hello world!

這個(gè)Web應(yīng)用基于Spring MVC,因此你需要配置Spring MVC,然后設(shè)置view controller來暴露這些模板。下面就是一個(gè)配置好Spring MVC的Class。

文件名:src/main/java/hello/MvcConfig.java

package hello;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/home").setViewName("home");
        registry.addViewController("/").setViewName("home");
        registry.addViewController("/hello").setViewName("hello");
        registry.addViewController("/login").setViewName("login");
    }

}

addViewControllers()方法(覆蓋了WebMvcConfigurerAdapter的同名方法)添加了四個(gè)view controller。其中兩個(gè)view controller指向了“home”視圖(在home.html中定義),另一個(gè)指向了“hello”視圖(在hello.html中定義)。第四個(gè)view controller指向另一個(gè)視圖“l(fā)ogin”,你將會(huì)在下個(gè)章節(jié)創(chuàng)建這個(gè)視圖。

此刻,你可以直接跳到“讓W(xué)eb應(yīng)用可執(zhí)行”的部分,在不需要任何登陸工作的情況下運(yùn)行Web應(yīng)用。

一旦最基本的Web應(yīng)用創(chuàng)建好了,你可以給他加上安全防護(hù)。

部署Spring Security

假設(shè)現(xiàn)在你希望防止未授權(quán)的用戶在輸入“/hello”這個(gè)網(wǎng)址后看到歡迎頁的內(nèi)容。當(dāng)前狀態(tài)下,如果用戶點(diǎn)擊“home”頁上的鏈接,他們可以沒有任何阻礙地看到歡迎頁?,F(xiàn)在你需要在用戶看到這個(gè)頁面前添加一個(gè)強(qiáng)制用戶登錄的阻礙。

你可以通過配置Spring Security來完成上面所說的事。如果Spring Security在classpath中,SpringBoot會(huì)自動(dòng)使用“基本”HTTP認(rèn)證來保護(hù)所有HTTP端點(diǎn),你也可以進(jìn)一步的定制安全設(shè)置。首先要做的事情就是把Spring Security加入到classpath中。

如果使用Gradle,它將會(huì)是dependencies部分中的一行:

文件名:build.gradle

dependencies {
    ...
    compile("org.springframework.boot:spring-boot-starter-security")
    ...
}

如果使用Maven,他將會(huì)是標(biāo)簽中的一個(gè)子標(biāo)簽:

文件名:pom.xml


    ...
        
            org.springframework.boot
            spring-boot-starter-security
        
    ...

下面是確保只有認(rèn)證過的用戶才能看到“秘密的”歡迎頁的安全配置:

文件名:src/main/java/hello/WebSecurityConfig.java

package hello;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/home").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
                .withUser("user").password("password").roles("USER");
    }
}

這個(gè)WebSecurityConfig類被@EnableWebMvcSecurity標(biāo)注,來啟用Spring Security的web安全支持、以及提供與Spring MVC的融合。這個(gè)類還繼承了WebSecurityConfigurerAdapter并重寫了一些方法來指定一些特定的Web安全設(shè)置。

configure(HttpSecurity)方法規(guī)定了哪個(gè)URL應(yīng)該被保護(hù),哪個(gè)不應(yīng)該。具體而言,“/”和“/home”的路徑被配置為不需要任何認(rèn)證。所有其他URL必須進(jìn)行身份驗(yàn)證。

當(dāng)用戶成功登錄后,他們將被重定向到先前請(qǐng)求的需要身份驗(yàn)證的頁面。還有一個(gè)自定義(由loginPage()指定)的“/login”頁面,每個(gè)用戶都可以查看。

對(duì)于configureGlobal(AuthenticationManagerBuilder)方法,它設(shè)置了一個(gè)單一用戶在內(nèi)存中的用戶數(shù)據(jù)庫(kù)。該用戶被賦予“user”的用戶名,“password”的密碼,以及“USER”作為角色。

現(xiàn)在,我們需要?jiǎng)?chuàng)建登錄頁面。目前已經(jīng)為“l(fā)ogin”視圖賦予了視圖控制器,所以你只需要?jiǎng)?chuàng)建login視圖本身:

文件名:src/main/resources/templates/login.html



    
        Spring Security Example 
    
    
        
Invalid username and password.
You have been logged out.

正如你所看到的,這個(gè)Thymeleaf模板只是給出了一個(gè)采集用戶名和密碼,并將它們作為請(qǐng)求post到“/login”的表單。正如剛剛配置的,Spring Security提供一個(gè)過濾器,截取該請(qǐng)求,并驗(yàn)證用戶身份。如果用戶身份驗(yàn)證失敗,頁面被重定向到“/login?error”,我們的頁面將顯示相應(yīng)的錯(cuò)誤信息。一旦成功登出了,我們的應(yīng)用程序重定向到到“/login?logout”并顯示相應(yīng)的登陸成功的消息。

最后,我們需要給用戶提供一種方式來顯示當(dāng)前用戶名和“Sign Out”按鈕。更新hello.html來問好當(dāng)前用戶,并包含一個(gè)“Sign Out”的按鈕,如下所示:

文件名:src/main/resources/templates/hello.html



    
        Hello World!
    
    
        

Hello [[${#httpServletRequest.remoteUser}]]!

我們通過使用Spring Security所集成的HttpServletRequest#getRemoteUser()來顯示用戶名。該“Sign Out”按鈕提交一個(gè)POST請(qǐng)求給“/logout”。一旦成功退出,將用戶重定向到“/login?logout”。

讓W(xué)eb應(yīng)用可執(zhí)行

雖然可以打包這項(xiàng)服務(wù)作為一個(gè)傳統(tǒng)的web應(yīng)用程序歸檔或WAR文件部署到外部應(yīng)用服務(wù)器,下面展示了更簡(jiǎn)單的方法來創(chuàng)建一個(gè)獨(dú)立的應(yīng)用程序。你將打包一切到一個(gè)單一的,可執(zhí)行的JAR文件中,用一個(gè)良好舊式Javamain()方法來調(diào)用。在此過程中,你會(huì)用到Spring所支持的嵌入式Tomcat servlet容器作為HTTP運(yùn)行實(shí)例,而不是部署一個(gè)外部實(shí)例。

文件名:src/main/java/hello/Application.java

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) throws Throwable {
        SpringApplication.run(Application.class, args);
    }

}

@SpringBootApplication是個(gè)方便的注解,自動(dòng)添加了所有以下內(nèi)容:

@Configuration標(biāo)記這個(gè)類作為bean以定義應(yīng)用程序上下文的來源。

@EnableAutoConfiguration告訴SpringBoot開始添加基于classpath設(shè)置,其他Beans,以及各種屬性設(shè)置的Beans。

通常情況下你會(huì)給Spring MVC應(yīng)用加上@EnableWebMvc注解,但當(dāng)Spring Boot看到classpath中有spring-webmvc時(shí),會(huì)自動(dòng)添加這個(gè)注解。這標(biāo)記該應(yīng)用程序是一個(gè)Web應(yīng)用程序,并激活一些關(guān)鍵行為,比如創(chuàng)建一個(gè)DispatcherServlet。

@ComponentScan告訴Spring去hello包中尋找其他組件,配置,服務(wù)。

main()方法使用Spring Boot的SpringApplication.run()方法來啟動(dòng)應(yīng)用程序。你有沒有注意到,這里沒有一行XML,同樣也沒有web.xml文件。這個(gè)Web應(yīng)用程序是100%純Java寫的,你不必處理配置任何管道或基礎(chǔ)設(shè)施(譯注:plumbing or infrastructure,我這里直譯了)。

構(gòu)建一個(gè)可執(zhí)行的JAR包

如果你正在使用gradle,你可以使用./gradlew bootRun命令來運(yùn)行應(yīng)用程序。

你可以構(gòu)建一個(gè)包含所有必要的依賴,類和資源的一個(gè)可執(zhí)行的JAR文件。這樣使傳輸,版本管理和部署服務(wù)在整個(gè)開發(fā)生命周期在不同的環(huán)境,等等,變得更容易

./gradlew build

然后你可以這樣運(yùn)行JAR包:

java -jar build/libs/gs-securing-web-0.1.0.jar

如果你正在使用Maven,你可以通過mvn spring-boot:run來運(yùn)行應(yīng)用,或者你也可以通過mvn clean package來構(gòu)建JAR包,然后輸入下面的命令來運(yùn)行:

java -jar target/gs-securing-web-0.1.0.jar

注意:上述過程將創(chuàng)建一個(gè)可運(yùn)行的JAR。你也可以選擇構(gòu)建一個(gè)經(jīng)典的WAR包來代替。

一旦應(yīng)用程序啟動(dòng),用瀏覽器訪問http://localhost:8080。你應(yīng)該看到主頁:

當(dāng)你點(diǎn)擊這個(gè)鏈接,它會(huì)嘗試把你帶到/hello所指向的歡迎頁,但因?yàn)檫@個(gè)頁面是受保護(hù)的,而且目前為止你沒有登錄,它會(huì)帶你到登陸頁

注意:如果你是直接從“不安全”的版本跳到這的,那么你將不會(huì)看到登陸頁,請(qǐng)放松地回到上面寫完其余的基于安全的代碼

在登錄頁面,分別輸入“user”和“password”作為用戶名和密碼,即可作為測(cè)試用戶登錄。一旦你提交登錄表單,你會(huì)被進(jìn)行身份驗(yàn)證,然后帶你到歡迎頁:

如果你點(diǎn)擊“Sign Out”按鈕,你的身份驗(yàn)證被撤銷,你將會(huì)返回到登錄頁并顯示一個(gè)消息提示你已經(jīng)登出。

小結(jié)

恭喜你,你已經(jīng)開發(fā)了一個(gè)簡(jiǎn)單的、使用Spring Security來保護(hù)的Web應(yīng)用。

想寫一個(gè)新的指南,或向已有的指南貢獻(xiàn)自己的能力?請(qǐng)看我們的貢獻(xiàn)指南

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/64796.html

相關(guān)文章

  • Spring Security

    摘要:框架具有輕便,開源的優(yōu)點(diǎn),所以本譯見構(gòu)建用戶管理微服務(wù)五使用令牌和來實(shí)現(xiàn)身份驗(yàn)證往期譯見系列文章在賬號(hào)分享中持續(xù)連載,敬請(qǐng)查看在往期譯見系列的文章中,我們已經(jīng)建立了業(yè)務(wù)邏輯數(shù)據(jù)訪問層和前端控制器但是忽略了對(duì)身份進(jìn)行驗(yàn)證。 重拾后端之Spring Boot(四):使用JWT和Spring Security保護(hù)REST API 重拾后端之Spring Boot(一):REST API的搭建...

    keelii 評(píng)論0 收藏0
  • 】React Native 動(dòng)畫 API 入門實(shí)例

    摘要:簡(jiǎn)而言之,它將對(duì)動(dòng)畫中變化的屬性數(shù)值做插值運(yùn)算并且刷新視圖。注意我們所建立的的是的一個(gè)實(shí)例。最后我們使用,表示這個(gè)組件是可動(dòng)畫組件。一直不停動(dòng)動(dòng)畫序列的方法可以傳一個(gè)回調(diào)函數(shù),在動(dòng)畫全部執(zhí)行完時(shí)觸發(fā)。 翻譯自 React-native Animated API Basic Example 翻譯過程中有刪改 簡(jiǎn)介 本文是探索 react-native 中實(shí)現(xiàn)的的 Animated AP...

    qianfeng 評(píng)論0 收藏0
  • 那些年,我的前端/Java后端書單

    摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書籍。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書籍。全文為純?cè)瓌?chuàng),且將持續(xù)更新,未經(jīng)許可,不得進(jìn)行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 基礎(chǔ) 基礎(chǔ)書籍 進(jìn)階 進(jìn)階階段,深入學(xué)習(xí)的書...

    fxp 評(píng)論0 收藏0
  • 那些年,我的前端/Java后端書單

    摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書籍。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書籍。全文為純?cè)瓌?chuàng),且將持續(xù)更新,未經(jīng)許可,不得進(jìn)行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 基礎(chǔ) 基礎(chǔ)書籍 進(jìn)階 進(jìn)階階段,深入學(xué)習(xí)的書...

    Tecode 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<