java SpringSecurity使用詳解
SpringSecurity
shrio,SpringSecurity:認證,授權(VIP1,vip2…)
- 功能權限
- 訪問權限
- 菜單權限
- 攔截器,過濾器:大量的原生代碼,冗餘
1、pom.xml
<!--Thymeleaf--> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring5</artifactId> </dependency> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-java8time</artifactId> </dependency>
簡介
Spring Security是針對Spring項目的安全框架,也是Spring Boot底層安全模塊默認的技術選型,他可以實現強大的Web安全控制,對於安全控制,我們僅需要引入Spring-boot-starter-security模塊,進行少量的配置,即可實現強大的安全管理!
記住幾個類:
- WebSecurityConfigurerAdapter: 自定義Security策略
- AuthenticationManagerBuilder:自定義認證策略
- @EnableWebSecurity: 開啟WebSecurity模式 @Enablexxxx 開啟某個功能
Spring Security的兩個主要目標是“認證”和“授權”(訪問控制) .
“認證”(Authentication)
“授權”(Authorization)
這個概念是通用的,而不是隻在Spring Security中存在。
1、pom.xml
<!--security--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
2、Security的controller
package com.kuang.config; 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.crypto.bcrypt.BCryptPasswordEncoder; /*權限驗證的配置類,要先繼承WebSecurityConfigurerAdapter*/ @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { //定義訪問規則:首頁每個人都可以訪問,但是功能也隻有特定權限的人才能訪問 鏈式編程 //授權 @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/").permitAll() .antMatchers("/level1/**").hasRole("vip1") .antMatchers("/level2/**").hasRole("vip2") .antMatchers("/level3/**").hasRole("vip3"); //沒有權限默認跳轉到登陸頁面 /login http.formLogin(); } //認證 /* 密碼編碼: BCryptPasswordEncoder() 不編碼會報下面的錯誤 * java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null" * */ @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()) .withUser("qin").password(new BCryptPasswordEncoder().encode("111")).roles("vip1","vip2","vip3") .and() .withUser("aaa").password(new BCryptPasswordEncoder().encode("111")).roles("vip1"); } }
3、路徑轉發的controller
package com.kuang.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @Controller public class PathController { @GetMapping({"/","index"}) //"/""index"都會去到index.html public String Toindex(){ return "index"; } @GetMapping("/toLogin") public String Tologin(){ return "views/login"; } @GetMapping("/level1/{id}") //@PathVariable獲得url的占位符裡面的值 public String ToView(@PathVariable("id")int id){ return "views/level1/"+id; } @GetMapping("/level2/{id}") public String ToView2(@PathVariable("id")int id){ return "views/level2/"+id; } @GetMapping("/level3/{id}") public String ToView3(@PathVariable("id")int id){ return "views/level3/"+id; } }
當然也可以在數據庫中拿信息
源碼分析
沒有權限的話會自動轉發到/login
//沒有權限默認跳轉到登陸頁面 /login
http.formLogin();
//開啟註銷
http.logout();
註銷及權限控制
<!--thymeleof整合security--> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity5</artifactId> </dependency> xmlns:sec=http://www.thymeleaf.org/extras/spring-security
用spring-security實現用戶登錄後顯示用戶角色的信息
1、導入依賴thymeleof整合security
<!--thymeleof整合security--> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity5</artifactId> </dependency>
2、html命名空間
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
3、根據用戶的登錄狀態進行判斷顯示該有的信息
4、根據源碼寫表單name屬性
5、實現有什麼權限顯示什麼樣的信息
6、註銷logout-404
總結
本片文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- SpringBoot與SpringSecurity整合方法附源碼
- 詳解springboot springsecuroty中的註銷和權限控制問題
- SpringBoot+SpringSecurity實現基於真實數據的授權認證
- SpringBoot整合BCrypt實現密碼加密
- Spring Security的簡單使用