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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

springboot md5加密_SpringSecurity入门-SpringBoot集成SpringSecurity

發布時間:2023/12/19 javascript 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot md5加密_SpringSecurity入门-SpringBoot集成SpringSecurity 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

至今Java能夠如此的火爆Spring做出了很大的貢獻,它的出現讓Java程序的編寫更為簡單靈活,而Spring如今也形成了自己的生態圈,今天咱們探討的是Spring旗下的一個款認證工具:SpringSecurity,如今認證框架主流“shiro”和“SpringSecurity”,由于和Spring的無縫銜接,使用SpringSecurity的企業也越來越多。

基本概念

1.什么是認證

認證是對主體/用戶身份的確認,在我們的生活中隨處可見認證場景,如:小區門禁卡,人臉識別,指紋識別等都是對用戶身份的確認,在傳統的應用中我們通常使用用戶名/用戶ID和密碼來進行用戶的身份確認,即登錄,但登錄的方式不僅限制于用戶名/密碼的方式,認證是我們應用的第一道安全門,所以對于整個系統的安全來說顯得極其重要。

2.什么是授權

控制不同的用戶訪問不同的權限 ,用戶認證成功后,就可以對某些資源進行訪問,但是不同的用戶有不同的資源訪問權利,那么對用戶的授權也都不一樣。如:公司老板擁有對公司的所有權限,而部門主管只能有對自己管理的部門的權限,所以在程序中授權的過程就是賦予不同用戶不同權限的過程。

3.RBAC介紹

RBAC:是基于角色的訪問控制(Role-Based Access Control )在 RBAC 中,權限與角色相關聯,用戶通過成為適當角色的成員而得到這些角色的權限。這就極大地簡化了權限的管理。這樣管理都是層級相互依賴的,權限賦予給角色,而把角色又賦予用戶,這樣的權限設計很清楚,管理起來很方便。

舉例:可以把部門的展示,添加,修改,刪除等資源或功能打包成角色“部門管理”,然后把“部門管理”這個角色賦予某個用戶,那么這個用戶就是部門管理員,擁有部門的相關權限。

RBAC 認為授權實際上是Who 、What 、How 三元組之間的關系,也就是Who 對What 進行How 的操作。

  • 主體(Who ) :是權限的擁有者或主體(如:User,Role)。**
  • 資源 (what): 是操作或對象,如:頁面,菜單,按鈕,控制器(controller,hanler)等
  • 權限(how) :具體的權限, 如:張三可以刪除員工。 那么刪除員工就是一個權限

4.SpringSecurity介紹

Spring Security是一個能夠為基于Spring的企業應用系統提供聲明式的安全訪問控制解決方案的安全框架,SrpingSecurity為我們在做認證,授權方面提供了很多方便。它提供了一組可以在Spring應用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反轉Inversion of Control ,DI:Dependency Injection 依賴注入)和AOP(面向切面編程)功能,為應用系統提供聲明式的安全訪問控制功能,減少了為企業系統安全控制編寫大量重復代碼的工作。

SpringBoot+SpringSecurity快速上手

本案例是基于SpringBoot集成SpringSecurity,如果對SpringBoot不熟悉的小伙伴請先學習SpringBoot

1.搭建工程

基于SpringBoot搭建工程

2.導入依賴

org.springframework.boot spring-boot-starter-parent 2.0.5.RELEASE ? cn.itsource.security security-demo 1.0-SNAPSHOT ? security-demo ? UTF-81.81.8 ? org.springframework.boot spring-boot-starter-security ? org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test ? junit junit 4.12test ?

SpringBoot集成Security基礎依賴:spring-boot-starter-security

3.主配置類

SpringBoot的主啟動類,

@SpringBootApplication public class ApplicationConfig { public static void main(String[] args) { SpringApplication.run(ApplicationConfig.class); } }

4.控制器

這里編寫了一個登陸成功后的跳轉地址

@Controller public class AuthController { //登錄成功后重定向地址 @RequestMapping("/loginSuccess") @ResponseBody public String loginSuccess(){ return "登錄成功"; } } ?

5.UserDetailService

  • UserDetailsService

是SpringSecurity提供用來獲取認證用戶信息(用戶名,密碼,用戶的權限列表)的接口,我們可以實現該接口,復寫loadUserByUsername(username)方法加載我們數據庫中的用戶信息

  • UserDetails

是SpringSecurity用來封裝用戶信息的對象,我們使用它的實現類User封裝用戶信息并返回,我們這里模擬從數據庫查詢用戶名

/** * 用來提供給security的用戶信息的service, * 我們需要復寫 loadUserByUsername 方法返回數據庫中的用戶信息 */ @Service public class UserDetailServiceImpl implements UserDetailsService { ? /** * 加載數據庫中的認證的用戶的信息:用戶名,密碼,用戶的權限列表 * @param username: 該方法把username傳入進來,我們通過username查詢用戶的信息 (密碼,權限列表等)然后封裝成 UserDetails進行返回 ,交給security 。 */ @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { //User是security內部的對象,UserDetails的實現類 , 用來封裝用戶的基本信息(用戶名,密碼,權限列表) ? //模擬存儲在數據庫的用戶的密碼:123 String password = "123"; ? //用戶的權限列表,暫時為空 Collection authorities = new ArrayList<>(); ? User user = new User(username,password, authorities); ? return user; } }

6.配置Security

SpringSecurity提供了一個配置類WebSecurityConfigurerAdapter用來提供給我們對SpringSecurity做自定義配置,我們需要配置如下幾個信息:

  • 認證管理配置

需要指定我們自己定義的userDetailService,這樣SpringSecurity才會調用我們的userDetailService從而獲取到用戶信息,同時指定密碼比對方式

  • 授權規則配置

配置請求攔截規則,哪些資源需要認證,哪些資源不需要認證等等

@Configuration public class WebSecurityConfig extends WebSecurityConfigurerAdapter { ? @Autowired private UserDetailServiceImpl userDetailService ; ? //把我們自己的userDetailService替換掉默認的userDetailService,然后指定密碼編碼方式和密碼匹配 @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailService).passwordEncoder(new PasswordEncoder() { @Override public String encode(CharSequence rawPassword) { //對密碼進行加密后返回,可以自定義加密方式(如md5),因為我們使用的明文所以直接返回 return rawPassword.toString(); } @Override public boolean matches(CharSequence rawPassword, String encodedPassword) { //密碼比較方式 return rawPassword.equals(encodedPassword); } }); } ? //授權規則配置 @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/login").permitAll() //登錄路徑放行 .anyRequest().authenticated() //其他路徑都要攔截 .and().formLogin() //允許表單登錄, 設置登陸頁 .successForwardUrl("/loginSuccess") // 設置登陸成功頁 .and().logout().permitAll(); //登出 } ? }

7.訪問測試

啟動訪問: http://localhost:8080/login

輸入用戶名:zs ,密碼 :123 (見UserDetailServiceImpl.loadUserByUsername ) ,登錄成功頁面跳轉/loginSuccess,顯示“登錄成功”

總結

SpringBoot+SpringSecurity集成入門案例到這里就結束了,這里并沒有多SpringSecurity原理做過多解釋(留在后面章節),那么這個案例大概的實現思路是:

1.SpringSecurity根據我們在WebSecurityConfig中的配置會對除了“/login”之外的資源進行攔截做認證檢查,

2.如果沒有認證會跳轉到默認的認證頁面“/login” ,

3.輸入用戶名和密碼后點擊登錄,SpringSecurity會帶著用戶名調用 UserDetailsService.loadUserByUsername獲取用戶的認證信息(用戶名,密碼,權限等),

4.然后執行認證工作:表單密碼和loadUserByUsername加載的數據庫的密碼進行匹配(PasswordEncoder)

5.認證成功跳轉成功地址

總結

以上是生活随笔為你收集整理的springboot md5加密_SpringSecurity入门-SpringBoot集成SpringSecurity的全部內容,希望文章能夠幫你解決所遇到的問題。

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