SpringBoot はユーザーのデフォルト構成を採用しており、Spring Security を迅速に開始するには pom 依存関係を導入するだけで済みます。
目的: リクエストしているユーザーの身元を確認し、安全なアクセスを提供します
利点: Spring に基づいており、設定が簡単で、多くのコードを削減します
ビルド-in アクセス制御メソッド
permitAll()
は、一致した URL へのアクセスが誰でも許可されることを意味します。
authenticated()
は、一致した URL にアクセスする前に認証が必要であることを意味します。
anonymous()
は、一致する URL に匿名でアクセスできることを示します。この効果は、anonymous() に設定された URL がフィルタ チェーン内で
denyAll()
を実行する点を除いて、permitAll() と似ています。一致する URL へのアクセスは許可されません。
rememberMe()
「私を覚えている」ユーザーは、多くの Web サイトと同様に、この Web サイトにアクセスできます。 10日間、一度ログインすると覚えていただけるので、しばらくログインする必要はありません。
fullAuthenticated()
アクセスは、ユーザーが私のことを覚えていない場合にのみ可能です。つまり、段階的にログインする必要があります。
ロール権限の判断
hasAuthority(String)
ユーザーが特定の権限を持っているかどうかを判断します。ユーザーの権限はカスタムです。ログイン ロジック
#hasAnyAuthority(String ...) ユーザーが指定されたアクセス許可のいずれかを持っている場合、アクセスが許可されます
参照 Spring Security
<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>
パスワードのデフォルト ユーザーは、request.getRemoteAddr()を通じて IP アドレスを取得できます。実行後に自動的に生成される 名前: user
#デフォルト設定では、プロジェクトが開始されるたびにパスワードが再生成されます。同時に、ユーザー名とインターセプト リクエストは実行できません。実際のアプリケーションではカスタマイズ設定が必要になることが多いので、次に Spring Security のカスタム設定を行います。Spring Security の構成 (開始)
メモリ内で 2 つのユーザー ロール (管理者とユーザー) を構成し (プロセスを簡素化し、ロジックを理解するため)、異なるパスワードを設定します。ロールへのアクセスと同時に権限が付与されます。管理者はすべてのパス (つまり /*) にアクセスでき、ユーザーは /user の下のすべてのパスにのみアクセスできます。
インターフェイス、
WebSecurityConfigurerAdapter
configure() メソッドでユーザー ID を構成します:
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の使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。