Rumah >Java >javaTutorial >Cara menggunakan SpringBoot SpringSecurity
SpringBoot telah menggunakan konfigurasi lalai untuk pengguna, dan hanya perlu memperkenalkan kebergantungan pom untuk memulakan Spring Security dengan cepat.
Tujuan: Sahkan identiti pengguna yang meminta dan sediakan akses selamat
Kelebihan: Berdasarkan Spring, mudah dikonfigurasikan, kurangkan banyak kod
Dibina -dalam kaedah kawalan akses
permitAll()
menunjukkan bahawa sesiapa sahaja dibenarkan mengakses URL yang dipadankan.
authenticated()
bermakna URL yang dipadankan perlu disahkan sebelum boleh diakses.
anonymous()
bermakna URL yang sepadan boleh diakses tanpa nama. Kesannya adalah serupa dengan permitAll(), kecuali URL yang ditetapkan kepada anonymous() akan melaksanakan
denyAll()
dalam rantai penapis, menunjukkan bahawa URL yang dipadankan tidak dibenarkan diakses.
rememberMe()
Pengguna yang "ingat saya" dibenarkan mengakses laman web ini yang serupa dengan banyak laman web tanpa log masuk selama sepuluh hari Selepas log masuk sekali, anda akan diingati , dan kemudian anda tidak perlu log masuk untuk tempoh masa pada masa hadapan.
fullyAuthenticated()
Pengguna hanya boleh mengakses jika mereka tidak mengingati saya. Maksudnya, anda mesti log masuk langkah demi langkah.
Kebenaran peranan hakim
hasAuthority(String)
Tentukan sama ada pengguna mempunyai kebenaran khusus ditentukan oleh logik log masuk tersuai
hasAnyAuthority(String ...)
Benarkan akses jika pengguna mempunyai salah satu kebenaran yang diberikan
hasRole(String)
Benarkan akses jika pengguna mempunyai peranan yang diberikan. Jika tidak, 403 akan muncul
hasAnyRole(String ...)
Jika pengguna mempunyai salah satu daripada peranan yang diberikan, akses akan dibenarkan
hasIpAddress(String)
Jika permintaan adalah IP yang ditentukan akan diakses. Anda boleh mendapatkan alamat ip melalui request.getRemoteAddr()
Reference Spring Security
Tambah
<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>
pada fail Pom dan kata laluan pengguna lalai akan dijana secara automatik selepas menjalankan Named: user
Konfigurasi lalai akan menjana semula kata laluan setiap kali projek dimulakan Pada masa yang sama, nama pengguna dan permintaan pemintasan tidak boleh disesuaikan. Dalam aplikasi sebenar, konfigurasi tersuai selalunya diperlukan, jadi seterusnya lakukan konfigurasi tersuai bagi Spring Security.
Konfigurasikan dua peranan pengguna (pentadbir dan pengguna) dalam ingatan (mudahkan proses dan fahami logik), tetapkan kata laluan yang berbeza
Tetapkan akses peranan pada masa yang sama Kebenaran, di mana pentadbir boleh mengakses semua laluan (iaitu /*), dan pengguna hanya boleh mengakses semua laluan di bawah /pengguna.
Sesuaikan kelas konfigurasi dan laksanakan antara muka WebSecurityConfigurerAdapter
Terdapat dua kaedah konfigurasi() yang digunakan dalam antara muka WebSecurityConfigurerAdapter
, satu daripadanya mengkonfigurasi identiti pengguna dan satu lagi mengkonfigurasi kebenaran pengguna:
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(); } }Tambah ujian antara muka
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"; } }
Atas ialah kandungan terperinci Cara menggunakan SpringBoot SpringSecurity. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!