您好,登錄后才能下訂單哦!
這篇文章主要介紹了SpringBoot SpringSecurity怎么使用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇SpringBoot SpringSecurity怎么使用文章都會有所收獲,下面我們一起來看看吧。
SpringBoot已經為用戶采用默認配置,只需要引入pom依賴就能快速啟動Spring Security。
目的:驗證請求用戶的身份,提供安全訪問
優勢:基于Spring,配置方便,減少大量代碼
內置訪問控制方法
permitAll()
表示所匹配的 URL 任何人都允許訪問。
authenticated()
表示所匹配的 URL 都需要被認證才能訪問。
anonymous()
表示可以匿名訪問匹配的 URL 。和 permitAll() 效果類似,只是設置為 anonymous() 的 url 會執行 filter 鏈中
denyAll()
表示所匹配的 URL 都不允許被訪問。
rememberMe()
被“remember me”的用戶允許訪問 這個有點類似于很多網站的十天內免登錄,登陸一次即可記住你,然后未來一段時間不用登錄。
fullyAuthenticated()
如果用戶不是被 remember me 的,才可以訪問。也就是必須一步一步按部就班的登錄才行。
角色權限判斷
hasAuthority(String)
判斷用戶是否具有特定的權限,用戶的權限是在自定義登錄邏輯
hasAnyAuthority(String ...)
如果用戶具備給定權限中某一個,就允許訪問
hasRole(String)
如果用戶具備給定角色就允許訪問。否則出現 403
hasAnyRole(String ...)
如果用戶具備給定角色的任意一個,就允許被訪問
hasIpAddress(String)
如果請求是指定的 IP 就運行訪問。可以通過 request.getRemoteAddr() 獲取 ip 地址
引用 Spring Security
Pom 文件中添加
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>vipsoft-parent</artifactId> <groupId>com.vipsoft.boot</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>vipsoft-security</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.3.7</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
運行后會自動生成 password 默認用戶名為: user
默認配置每次都啟動項目都會重新生成密碼,同時用戶名和攔截請求也不能自定義,在實際應用中往往需要自定義配置,因此接下來對Spring Security進行自定義配置。
在內存中(簡化環節,了解邏輯)配置兩個用戶角色(admin和user),設置不同密碼;
同時設置角色訪問權限,其中admin可以訪問所有路徑(即/*),user只能訪問/user下的所有路徑。
自定義配置類,實現WebSecurityConfigurerAdapter
接口,WebSecurityConfigurerAdapter
接口中有兩個用到的 configure()方法,其中一個配置用戶身份,另一個配置用戶權限:
配置用戶身份的configure()方法:
SecurityConfig
package com.vipsoft.web.config; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) public class SecurityConfig extends WebSecurityConfigurerAdapter { /** * 配置用戶身份的configure()方法 * * @param auth * @throws Exception */ @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { PasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); //簡化操作,將用戶名和密碼存在內存中,后期會存放在數據庫、Redis中 auth.inMemoryAuthentication() .passwordEncoder(passwordEncoder) .withUser("admin") .password(passwordEncoder.encode("888")) .roles("ADMIN") .and() .withUser("user") .password(passwordEncoder.encode("666")) .roles("USER"); } /** * 配置用戶權限的configure()方法 * @param http * @throws Exception */ @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() //配置攔截的路徑、配置哪類角色可以訪問該路徑 .antMatchers("/user").hasAnyRole("USER") .antMatchers("/*").hasAnyRole("ADMIN") //配置登錄界面,可以添加自定義界面, 沒添加則用系統默認的界面 .and().formLogin(); } }
添加接口測試用
package com.vipsoft.web.controller; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class DefaultController { @GetMapping("/") @PreAuthorize("hasRole('ADMIN')") public String demo() { return "Welcome"; } @GetMapping("/user/list") @PreAuthorize("hasAnyRole('ADMIN','USER')") public String getUserList() { return "User List"; } @GetMapping("/article/list") @PreAuthorize("hasRole('ADMIN')") public String getArticleList() { return "Article List"; } }
關于“SpringBoot SpringSecurity怎么使用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“SpringBoot SpringSecurity怎么使用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。