SpringBoot hat die Standardkonfiguration für Benutzer übernommen. Sie müssen nur POM-Abhängigkeiten einführen, um Spring Security schnell zu starten.
Zweck: Überprüfen Sie die Identität des anfordernden Benutzers und stellen Sie sicheren Zugriff bereit
Vorteile: Basierend auf Spring, einfach zu konfigurieren, viel Code reduzieren
Eingebaute Zugriffskontrollmethode
permitAll( )
stellt die übereinstimmende URL dar. Die URL ist für jedermann zugänglich. 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
authenticated()
bedeutet, dass die übereinstimmende URL vor dem Zugriff authentifiziert werden muss.
anonymous()
bedeutet, dass auf die passende URL anonym zugegriffen werden kann. Der Effekt ist ähnlich wie bei „permitAll()“, außer dass die auf „anonymous()“ gesetzte URL die Filterkette
denyAll()
ausführt, was bedeutet, dass die übereinstimmenden URLs dies nicht dürfen zugegriffen werden.
rememberMe()
Benutzer, die sich an mich erinnern, dürfen auf diese Website zugreifen, die vielen anderen Websites ähnelt. Sie müssen sich zehn Tage lang nicht anmelden. Sie können sich nach der einmaligen Anmeldung an Sie erinnern und müssen sich dann für einen bestimmten Zeitraum nicht mehr anmelden. 🎜🎜🎜fullyAuthenticated()
Der Benutzer kann nur zugreifen, wenn er sich nicht an mich erinnert. Das heißt, Sie müssen sich Schritt für Schritt anmelden. 🎜🎜Beurteilung der Rollenberechtigungen🎜🎜🎜🎜hasAuthority(String)
Bestimmt, ob der Benutzer über bestimmte Berechtigungen verfügt. Die Berechtigungen des Benutzers werden durch die benutzerdefinierte Anmeldelogik bestimmt🎜 🎜🎜hasAnyAuthority(String ...)
Wenn der Benutzer über eine der angegebenen Berechtigungen verfügt, ist der Zugriff zulässig🎜🎜🎜hasRole(String)
Wenn der Benutzer Hat Der Zugriff ist aufgrund der Rolle zulässig. Andernfalls wird 403 angezeigt🎜🎜🎜hasAnyRole(String ...)
Wenn der Benutzer eine der angegebenen Rollen hat, wird der Zugriff gewährt🎜🎜🎜hasIpAddress( String)
Führen Sie den Zugriff aus, wenn die Anfrage für die angegebene IP erfolgt. Sie können die IP-Adresse über request.getRemoteAddr() abrufen 🎜🎜🎜🎜Die Standardkonfiguration wird neu generiert Bei jedem Start des Projekts können Benutzername und Abfanganforderung nicht angepasst werden. In tatsächlichen Anwendungen ist häufig eine benutzerdefinierte Konfiguration erforderlich. Der nächste Schritt besteht darin, Spring Security anzupassen. 🎜WebSecurityConfigurerAdapter
. In der Schnittstelle WebSecurityConfigurerAdapter
werden zwei configure()-Methoden verwendet, von denen eine die Benutzeridentität und die andere den Benutzer konfiguriert Berechtigungen. : 🎜🎜 configure()-Methode zum Konfigurieren der Benutzeridentität: 🎜🎜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(); } }🎜Schnittstellentest hinzufügen🎜
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"; } }🎜🎜🎜
Das obige ist der detaillierte Inhalt vonSo verwenden Sie SpringBoot SpringSecurity. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!