ホームページ  >  記事  >  Java  >  SpringBoot が SpringSecurity を迅速に統合する方法

SpringBoot が SpringSecurity を迅速に統合する方法

WBOY
WBOY転載
2023-05-16 21:56:28921ブラウズ

1. SpringSecurity とは何ですか?

Spring Security は Spring フレームワークに基づくセキュリティ フレームワークで、認証、認可、攻撃防止などの一般的なセキュリティ機能を実装するための軽量 API とツールのセットを提供します。 Basic認証、フォーム認証、OAuth3.0、OpenID Connectなど、さまざまな認証方式に対応しています。 Spring Security には多数の構成可能なオプションがあるため、開発者はアプリケーションのニーズに応じてカスタマイズできます。 Spring Security は、Java エンタープライズ アプリケーションで最も広く使用されているセキュリティ フレームワークの 1 つになりました。

2. SpringSecurity の原則

Spring Security の主な原則は、フィルター チェーンを通じてアプリケーション リソースを保護することです。認証、認可、攻撃防御など、さまざまなセキュリティ機能がフィルタ チェーン内のさまざまなフィルタによって処理されます。

リクエストがアプリケーションに到達すると、最初に最も外側のフィルターによってインターセプトされます。このフィルターはリクエストを次のフィルターに渡し、その前にロギングやクロスオリジンリクエストの処理などの前処理を実行します。各フィルターは、最も内側のフィルターが要求を処理して応答を返すまで、フィルター チェーン内で順番に実行されます。

Spring Security は、フィルター チェーンを構成することでアプリケーション リソースを保護します。各フィルターには、次のような異なる役割があります。

(1) AuthenticationFilter: ユーザーの認証に使用される認証フィルター。

(2)AuthorizationFilter: ユーザーがリソースにアクセスする権限を持っているかどうかを確認するために使用される承認フィルター。

(3) CsrfFilter: クロスサイト リクエスト フォージェリ (CSRF) 攻撃を防ぐために使用される、CSRF フィルターを防止します。

(4)ExceptionTranslationFilter は、セキュリティ関連の例外を処理し、例外の変換を担当するフィルターです。

(5) SessionManagementFilter: セッション管理フィルター。ユーザー セッションの管理に使用されます。

開発者は、Spring Security が提供する API とツールに基づいて独自のセキュリティ ポリシーをカスタマイズし、フィルター チェーンに追加できます。アプリケーションはリクエストを受信すると、これらのセキュリティ ポリシーに従ってリソースを保護します。

3. SpringBoot は SpringSecurity を統合します

依存関係を追加します

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

Spring Security を構成します

# 设置默认用户
spring.security.user.name=user
spring.security.user.password=pass

# 关闭CSRF保护
spring.security.csrf.enabled=false

セキュリティ構成クラスを書き込みます。 Spring Securityを構成するセキュリティ構成クラスを作成します。このクラスは WebSecurityConfigurerAdapter を拡張し、セキュリティを構成するためにいくつかのメソッドをオーバーライドする必要があります。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    // 配置用户信息
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("user").password("{noop}pass").roles("USER");
    }
    
    // 配置HTTP请求安全性
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/public/**").permitAll() // 允许/public/**路径下的所有请求
            .anyRequest().authenticated() // 所有其他请求都需要身份验证
            .and()
            .formLogin() // 启用表单登录
            .loginPage("/login") // 指定登录页面
            .defaultSuccessUrl("/", true) // 登录成功后重定向到主页
            .permitAll() // 允许所有用户访问登录页面
            .and()
            .logout() // 启用注销
            .logoutUrl("/logout") // 注销URL
            .logoutSuccessUrl("/login") // 注销成功后重定向到登录页面
            .permitAll(); // 允许所有用户注销
    }
}

上記の構成では、メモリ内認証 (ユーザー名とパスワードを使用) と HTTP リクエスト セキュリティ (特定のパスでのリクエストを許可し、他のすべてのリクエストには認証を要求し、フォームのログインとログアウトをオンにする) を設定しました。 )。

コントローラーの書き込み。最後に、ログインおよびログアウト要求を処理するコントローラーを作成する必要があります。

@Controller
public class LoginController {
    
    // 处理登录请求
    @GetMapping("/login")
    public String login() {
        return "login";
    }
    
    // 处理注销请求
    @PostMapping("/logout")
    public String logout() {
        return "redirect:/login?logout=true";
    }
}

ログイン ページのリクエストを処理し、login という名前のテンプレートを返すコード内で、login() という名前のメソッドを定義します。 logout() メソッドは、ログアウト要求を処理し、ログイン ページにリダイレクトするために使用されます。

HTML テンプレートを作成します。最後に、ログイン ページをレンダリングするために、login.html というテンプレートを作成する必要があります。

rree

以上がSpringBoot が SpringSecurity を迅速に統合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。