javascript
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 条件渲染vue
- 下一篇: ajax datatype_JavaSc