日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HttpSecurity初步理解

發布時間:2024/9/30 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HttpSecurity初步理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么會有 web security 這么個東西存在?

  • 為了阻止假用戶冒充真實用戶訪問網站,所以需要 認證(authentication)。
  • 為了阻止真實用戶訪問本不是他應該訪問的頁面,所以需要授權(authorization)。
  • 為了阻止真實用戶與網站之間傳輸的信息被第三方竊聽到,所以需要加密(encryption)。

Spring Security是一個強大的、可根據需求高度自定義的用戶認證訪問控制框架。Spring Security 怎么保證所有向 Spring application 發送請求的用戶必須先通過認證?怎么保證用戶可以通過表單或者 http 的方式進行認證。解決的辦法是Spring Security中有個WebSecurityConfigurerAdapter類,程序員通過繼承這個類并重寫 configure(HttpSecurity http) 方法就可以按照場景需求自定義認證和授權。

// 這是源碼中默認的 認證 和 授權 的配置。protected void configure(HttpSecurity http) throws Exception {this.logger.debug("Using default configure(HttpSecurity). If subclassed this will potentially override subclass configure(HttpSecurity).");((HttpSecurity)((HttpSecurity)((AuthorizedUrl)http.authorizeRequests().anyRequest()).authenticated().and()).formLogin().and()).httpBasic();}

這個配置規定了以下三點:

  • 若要給應用程序發送請求,則發送請求的用戶必須先通過認證。
  • 允許用戶采用表單登錄的方式進行認證。
  • 允許用戶采用 HTTP 基本的認證方式進行認證。

Java配置和表單登錄

當配置表單登錄后,就需要一個登錄頁面供用戶填寫 用戶名 和 密碼。Spring Secrity 默認了一個頁面,如果你覺得它很丑,也可以自己寫一個,使用 loginPage("/login") 聲明自定義的登錄頁面所在位置。當用戶第一次訪問 web 應用時會自動跳轉到默認登錄界面或者用戶自定義的登錄界面。

protected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().anyRequest().authenticated().and().formLogin().loginPage("/login") .permitAll(); }

在這個demo中,loginPage("/login")指定了登錄頁的URL,并允許所有的用戶(包括沒認證的)訪問登錄頁,formLogin().permitAll()方法允許所有用戶訪問這個URL。

認證請求

應用程序的每個URL都要求用戶通過認證,我們可以通過給http.authorizeRequests()方法添加子方法的方式為每個URL指定自定義要求。例如:

//請求授權驗證 protected void configure(HttpSecurity http) throws Exception {http.authorizeRequests() 1.antMatchers("/resources/**", "/signup", "/about").permitAll() 2.antMatchers("/admin/**").hasRole("ADMIN") 3.antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')") 4.anyRequest().authenticated() 5.and()// ....formLogin(); }
  • **http.authorizeRequests()**下添加了多個匹配器,每個匹配器用來控制不同的URL接受不同的用戶訪問。簡單講,http.authorizeRequests()就是在進行請求的權限配置。

  • 所有用戶都可以訪問以/resources/**開頭的URL,和/signup、/about兩個URL。

  • 擁有ADMIN角色的用戶可以訪問以/admin/開頭的URL。hasRole(String):如果當前用戶有String表示的角色,則返回True。
    同時擁有ADMIN和DBA角色的用戶可以訪問以/db/**開頭的URL。

  • access(String):當String為true時才可進行訪問。
    所有沒被匹配器匹配到的URL都需用戶通過認證。

  • and()返回一個SecurityBuilder。Spring Security支持兩種認證方式:formLogin()和httpBasic()。

官方文檔:https://docs.spring.io/spring-security/site/docs/5.0.7.RELEASE/reference/htmlsingle/#samples

總結

以上是生活随笔為你收集整理的HttpSecurity初步理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。