最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot Security配置教程

 更新時(shí)間:2019年05月26日 10:27:39   投稿:laozhang  
在本文里我們給大家分享了關(guān)于Spring Boot Security配置的相關(guān)步驟以及注意要點(diǎn),需要的朋友們跟著操作下。

1.簡(jiǎn)介

在本文中,我們將了解Spring Boot對(duì)spring Security的支持。

簡(jiǎn)而言之,我們將專(zhuān)注于默認(rèn)Security配置以及如何在需要時(shí)禁用或自定義它。

2.默認(rèn)Security設(shè)置

為了增加Spring Boot應(yīng)用程序的安全性,我們需要添加安全啟動(dòng)器依賴(lài)項(xiàng):

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-security</artifactId>
</dependency>

這將包括SecurityAutoConfiguration類(lèi) - 包含初始/默認(rèn)安全配置。

注意我們?cè)谶@里沒(méi)有指定版本,假設(shè)項(xiàng)目已經(jīng)使用Boot作為父項(xiàng)。

簡(jiǎn)而言之,默認(rèn)情況下,為應(yīng)用程序啟用身份驗(yàn)證。此外,內(nèi)容協(xié)商用于確定是否應(yīng)使用basic或formLogin。

有一些預(yù)定義的屬性,例如:

spring.security.user.name
spring.security.user.password

如果我們不使用預(yù)定義屬性spring.security.user.password配置密碼并啟動(dòng)應(yīng)用程序,我們會(huì)注意到隨機(jī)生成默認(rèn)密碼并在控制臺(tái)日志中打?。?/p>

Using default security password: c8be15de-4488-4490-9dc6-fab3f91435c6

3.禁用自動(dòng)配置

要放棄安全性自動(dòng)配置并添加我們自己的配置,我們需要排除SecurityAutoConfiguration類(lèi)。

這可以通過(guò)簡(jiǎn)單的排除來(lái)完成:

@SpringBootApplication(exclude = { SecurityAutoConfiguration.class })
public class SpringBootSecurityApplication {
 
  public static void main(String[] args) {
    SpringApplication.run(SpringBootSecurityApplication.class, args);
  }
}

或者通過(guò)在application.properties文件中添加一些配置:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration

還有一些特殊情況,這種設(shè)置還不夠。

例如,幾乎每個(gè)Spring Boot應(yīng)用程序都在類(lèi)路徑中使用Actuator啟動(dòng)。
這會(huì)導(dǎo)致問(wèn)題,因?yàn)榱硪粋€(gè)自動(dòng)配置類(lèi)需要我們剛剛排除的那個(gè),因此應(yīng)用程序?qū)o(wú)法啟動(dòng)。

為了解決這個(gè)問(wèn)題,我們需要排除該類(lèi);并且,特定于A(yíng)ctuator情況,我們需要排除

ManagementWebSecurityAutoConfiguration。

3.1. 禁用和超越 Security Auto-Configuration
禁用自動(dòng)配置和超越它之間存在顯著差異。

通過(guò)禁用它,就像從頭開(kāi)始添加Spring Security依賴(lài)項(xiàng)和整個(gè)設(shè)置一樣。這在以下幾種情況下很有用:

將應(yīng)用程序security與自定義security提供程序集成

將已有security設(shè)置的舊Spring應(yīng)用程序遷移到Spring Boot

但是,大多數(shù)情況下我們不需要完全禁用安全自動(dòng)配置。

Spring Boot的配置方式允許通過(guò)添加我們的新/自定義配置類(lèi)來(lái)超越自動(dòng)配置的安全性。這通常更容易,因?yàn)槲覀冎皇嵌ㄖ片F(xiàn)有的安全設(shè)置以滿(mǎn)足我們的需求。

4.配置Spring Boot Security
如果我們選擇了禁用Security自動(dòng)配置的路徑,我們自然需要提供自己的配置。

正如我們之前討論過(guò)的,這是默認(rèn)的安全配置;我們可以通過(guò)修改屬性文件來(lái)自定義它。

例如,我們可以通過(guò)添加我們自己的密碼來(lái)覆蓋默認(rèn)密碼:

security.user.password=password

如果我們想要一個(gè)更靈活的配置,例如多個(gè)用戶(hù)和角色 - 您現(xiàn)在需要使用完整的@Configuration類(lèi):

@Configuration
@EnableWebSecurity
public class BasicConfiguration extends WebSecurityConfigurerAdapter {
 
  @Override
  protected void configure(AuthenticationManagerBuilder auth)
   throws Exception {
    auth
     .inMemoryAuthentication()
     .withUser("user")
      .password("password")
      .roles("USER")
      .and()
     .withUser("admin")
      .password("admin")
      .roles("USER", "ADMIN");
  }
 
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
     .anyRequest()
     .authenticated()
     .and()
     .httpBasic();
  }
}

如果我們禁用默認(rèn)安全配置,則@EnableWebSecurity注釋至關(guān)重要。

如果丟失,應(yīng)用程序?qū)o(wú)法啟動(dòng)。只有在我們使用WebSecurityConfigurerAdapter覆蓋默認(rèn)行為時(shí),注釋才是可選的。

現(xiàn)在,我們應(yīng)該通過(guò)幾個(gè)快速實(shí)時(shí)測(cè)試驗(yàn)證我們的安全配置是否正確應(yīng)用:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
public class BasicConfigurationIntegrationTest {
 
  TestRestTemplate restTemplate;
  URL base;
  @LocalServerPort int port;
 
  @Before
  public void setUp() throws MalformedURLException {
    restTemplate = new TestRestTemplate("user", "password");
    base = new URL("http://localhost:" + port);
  }
 
  @Test
  public void whenLoggedUserRequestsHomePage_ThenSuccess()
   throws IllegalStateException, IOException {
    ResponseEntity<String> response 
     = restTemplate.getForEntity(base.toString(), String.class);
 
    assertEquals(HttpStatus.OK, response.getStatusCode());
    assertTrue(response
     .getBody()
     .contains("Baeldung"));
  }
 
  @Test
  public void whenUserWithWrongCredentials_thenUnauthorizedPage() 
   throws Exception {
 
    restTemplate = new TestRestTemplate("user", "wrongpassword");
    ResponseEntity<String> response 
     = restTemplate.getForEntity(base.toString(), String.class);
 
    assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode());
    assertTrue(response
     .getBody()
     .contains("Unauthorized"));
  }
}

實(shí)際上,Spring Boot Security的背后是Spring Security,所以任何可以用這個(gè)完成的安全配置,或者這個(gè)支持的任何集成都可以實(shí)現(xiàn)到Spring Boot中。

5. Spring Boot OAuth2自動(dòng)配置
Spring Boot為OAuth2提供專(zhuān)用的自動(dòng)配置支持。

在我們開(kāi)始之前,讓我們添加Maven依賴(lài)項(xiàng)來(lái)開(kāi)始設(shè)置我們的應(yīng)用程序:

<dependency>
  <groupId>org.springframework.security.oauth</groupId>
  <artifactId>spring-security-oauth2</artifactId>
</dependency>

此依賴(lài)項(xiàng)包括一組能夠觸發(fā)OAuth2AutoConfiguration類(lèi)中定義的自動(dòng)配置機(jī)制的類(lèi)。

現(xiàn)在,我們有多種選擇可以繼續(xù),具體取決于我們的應(yīng)用范圍。

5.1。 OAuth2授權(quán)服務(wù)器自動(dòng)配置
如果我們希望我們的應(yīng)用程序是OAuth2提供程序,我們可以使用@EnableAuthorizationServer。

在啟動(dòng)時(shí),我們會(huì)在日志中注意到自動(dòng)配置類(lèi)將為我們的授權(quán)服務(wù)器生成客戶(hù)端ID和客戶(hù)端密鑰,當(dāng)然還有用于基本身份驗(yàn)證的隨機(jī)密碼。

Using default security password: a81cb256-f243-40c0-a585-81ce1b952a98
security.oauth2.client.client-id = 39d2835b-1f87-4a77-9798-e2975f36972e
security.oauth2.client.client-secret = f1463f8b-0791-46fe-9269-521b86c55b71

這些憑據(jù)可用于獲取訪(fǎng)問(wèn)令牌:

curl -X POST -u 39d2835b-1f87-4a77-9798-e2975f36972e:f1463f8b-0791-46fe-9269-521b86c55b71 \
 -d grant_type=client_credentials -d username=user -d password=a81cb256-f243-40c0-a585-81ce1b952a98 \
 -d scope=write http://localhost:8080/oauth/token

5.2。其他Spring Boot OAuth2自動(dòng)配置設(shè)置

Spring Boot OAuth2涵蓋了一些其他用例,例如:

資源服務(wù)器 - @EnableResourceServer

客戶(hù)端應(yīng)用程序 - @ EnableOAuth2Sso或@ EnableOAuth2Client

如果我們需要將我們的應(yīng)用程序作為上述類(lèi)型之一,我們只需要為應(yīng)用程序?qū)傩蕴砑右恍┡渲谩?/p>

6. Spring Boot 2 security與Spring Boot 1 security

與Spring Boot 1相比,Spring Boot 2大大簡(jiǎn)化了自動(dòng)配置。

在Spring Boot 2中,如果我們想要自己的安全配置,我們可以簡(jiǎn)單地添加一個(gè)自定義的WebSecurityConfigurerAdapter。這將禁用默認(rèn)自動(dòng)配置并啟用我們的自定義安全配置。

Spring Boot 2使用Spring Security的大部分默認(rèn)值。因此,默認(rèn)情況下,Spring Boot 1中默認(rèn)不安全的某些端點(diǎn)現(xiàn)在是安全的。

這些端點(diǎn)包括靜態(tài)資源,如/ css / ,/ js / ,/ images / ,/ webjars / ,//favicon.ico和錯(cuò)誤端點(diǎn)。如果我們需要允許對(duì)這些端點(diǎn)進(jìn)行未經(jīng)身份驗(yàn)證的訪(fǎng)問(wèn),我們可以明確地配置它**。

為了簡(jiǎn)化與安全相關(guān)的配置,Spring Boot 2刪除了以下Spring Boot 1屬性:

security.basic.authorize-mode
security.basic.enabled
security.basic.path
security.basic.realm
security.enable-csrf
security.headers.cache
security.headers.content-security-policy
security.headers.content-security-policy-mode
security.headers.content-type
security.headers.frame
security.headers.hsts
security.headers.xss
security.ignored
security.require-ssl
security.sessions

7.結(jié)論

在本文中,我們重點(diǎn)介紹Spring Boot提供的默認(rèn)安全配置。我們了解了如何禁用或覆蓋安全性自動(dòng)配置機(jī)制以及如何應(yīng)用新的安全性配置。

附上源碼:https://github.com/eugenp/tutorials/tree/master/spring-boot-security

相關(guān)文章

  • Java高并發(fā)BlockingQueue重要的實(shí)現(xiàn)類(lèi)詳解

    Java高并發(fā)BlockingQueue重要的實(shí)現(xiàn)類(lèi)詳解

    這篇文章主要給大家介紹了關(guān)于Java高并發(fā)BlockingQueue重要的實(shí)現(xiàn)類(lèi)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(1)

    java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(1)

    下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你
    2021-07-07
  • SpringCloud服務(wù)接口調(diào)用OpenFeign及使用詳解

    SpringCloud服務(wù)接口調(diào)用OpenFeign及使用詳解

    這篇文章主要介紹了SpringCloud服務(wù)接口調(diào)用——OpenFeign,在學(xué)習(xí)Ribbon時(shí),服務(wù)間調(diào)用使用的是RestTemplate+Ribbon實(shí)現(xiàn),而Feign在此基礎(chǔ)上繼續(xù)進(jìn)行了封裝,使服務(wù)間調(diào)用變得更加方便,需要的朋友可以參考下
    2023-04-04
  • Java子線(xiàn)程無(wú)法獲取Attributes的解決方法(最新推薦)

    Java子線(xiàn)程無(wú)法獲取Attributes的解決方法(最新推薦)

    在Java多線(xiàn)程編程中,子線(xiàn)程無(wú)法直接獲取主線(xiàn)程設(shè)置的Attributes是一個(gè)常見(jiàn)問(wèn)題,本文探討了這一問(wèn)題的原因,并提供了兩種解決方案,對(duì)Java子線(xiàn)程無(wú)法獲取Attributes的解決方案感興趣的朋友一起看看吧
    2025-01-01
  • Java報(bào)錯(cuò)net.dean.jraw.http.NetworkException異常的原因及解決方法

    Java報(bào)錯(cuò)net.dean.jraw.http.NetworkException異常的原因及解決方法

    在開(kāi)發(fā)涉及網(wǎng)絡(luò)通信的Java應(yīng)用程序時(shí),我們經(jīng)常需要處理各種網(wǎng)絡(luò)異常,net.dean.jraw.http.NetworkException是在使用jRAW庫(kù)時(shí)可能遇到的一個(gè)異常,本文將詳細(xì)探討NetworkException的成因,并提供多種解決方案,需要的朋友可以參考下
    2024-12-12
  • java讀取word文檔,提取標(biāo)題和內(nèi)容的實(shí)例

    java讀取word文檔,提取標(biāo)題和內(nèi)容的實(shí)例

    這篇文章主要介紹了java讀取word文檔,提取標(biāo)題和內(nèi)容的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • SpringBoot中Druid連接池與多數(shù)據(jù)源切換的方法

    SpringBoot中Druid連接池與多數(shù)據(jù)源切換的方法

    微服務(wù)架構(gòu)中多數(shù)據(jù)源切換是個(gè)常見(jiàn)的需求,Spring Boot 提供了強(qiáng)大的支持來(lái)簡(jiǎn)化這一過(guò)程.本文給大家介紹了SpringBoot中Druid連接池與多數(shù)據(jù)源切換的方法,需要的朋友可以參考下
    2024-11-11
  • Java處理XSS漏洞的四種方法小結(jié)

    Java處理XSS漏洞的四種方法小結(jié)

    本文主要介紹了Java處理XSS漏洞的四種方法小結(jié),包含使用HTML實(shí)體編碼、使用內(nèi)容安全策略(CSP)、使用框架內(nèi)置的XSS防護(hù)和自定義過(guò)濾器等方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • MybatisPlus如何自動(dòng)生成映射文件

    MybatisPlus如何自動(dòng)生成映射文件

    這篇文章主要介紹了MybatisPlus如何自動(dòng)生成映射文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 如何解決shardingsphere報(bào)錯(cuò)Missing?the?data?source?name:‘null‘

    如何解決shardingsphere報(bào)錯(cuò)Missing?the?data?source?name:‘null‘

    使用ShardingSphere進(jìn)行分庫(kù)操作時(shí),如果遇到“Missing?the?datasource?name:?‘null’”的錯(cuò)誤,通常是因?yàn)樗僮鞯谋頉](méi)有配置相關(guān)的路由信息,例如,如果在properties中僅配置了health_record和health_task的路由規(guī)則
    2024-11-11

最新評(píng)論

玛纳斯县| 宜良县| 兴山县| 汽车| 三门峡市| 桦甸市| 百色市| 黎平县| 巴彦淖尔市| 新源县| 平山县| 南开区| 班玛县| 获嘉县| 平昌县| 广德县| 临汾市| 恩施市| 台江县| 醴陵市| 容城县| 广安市| 汝阳县| 乌兰浩特市| 理塘县| 巩留县| 手游| 马山县| 禄劝| 乌拉特前旗| 沂水县| 贵南县| 温宿县| 出国| 东丰县| 黄浦区| 修水县| 花垣县| 鲁山县| 嘉义县| 沙河市|