ホームページ バックエンド開発 PHPチュートリアル Java バックエンド開発: Spring Security を使用した API セキュリティ

Java バックエンド開発: Spring Security を使用した API セキュリティ

Jun 17, 2023 am 09:49 AM
Javaバックエンド APIセキュリティ spring security

最新の Web アプリケーションの成長に伴い、API は Web 開発の重要な部分になりました。これらの API はモバイル デバイス、Web アプリケーション、その他のサービスから呼び出すことができるため、API のセキュリティが重要になります。 Java バックエンド開発では、API のセキュリティを保護および管理するための強力なフレームワークを提供する Spring Security が一般的な選択肢です。

Spring Security は、API がユーザー データをより安全に保護できるようにする強力で柔軟なフレームワークです。 Springフレームワークをベースにしており、セキュリティメカニズムを備えており、認証、認可、シングルサインオン、パスワード管理などの多くのセキュリティ機能を提供します。この記事では、Java バックエンドで Spring Security を使用して API を保護する方法に焦点を当てます。

Spring Security を使用して API セキュリティを実装するには、次の手順があります。

  1. Spring Security の構成

Spring Security の構成で最も重要な部分は、SecurityConfig です。クラス。このクラスでは、どの URL を安全に管理する必要があり、どの URL を解放する必要があるかを定義する必要があります。ここで認証および認可メカニズムを定義することもできます。

サンプル コード:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private AuthUserDetailsS​​ervice userDetailsS​​ervice;

@ Autowired
private CustomAuthenticationProvider authProvider;

@Override
public void configure(AuthenticationManagerBuilder auth) が例外をスローします {

   auth.authenticationProvider(authProvider);
   auth.userDetailsService(userDetailsService);
ログイン後にコピー

}

@Override
protected void configure(HttpSecurity http) throws Exception {

   http.authorizeRequests()
       .antMatchers("/admin/**").hasAuthority("ADMIN")
       .antMatchers("/api/**").authenticated()
       .and()
       .csrf().disable()
       .formLogin().disable()
       .httpBasic();
ログイン後にコピー

}

}

上記のコード例では、SecurityConfig クラスを定義し、Spring が提供する WebSecurityConfigurerAdapter クラスを継承しました。 @Autowired アノテーションを使用して、ユーザー情報を認証するための独自の userDetailsS​​ervice と authProvider を挿入します。 configure() メソッドでは、どの URL を安全に管理する必要があるかを定義します。たとえば、/admin/ にはアクセスするために ADMIN 権限が必要で、/api/ にはアクセス前に認証が必要です。

  1. カスタム認証の実装

認証は、多くの場合、Spring アプリケーションの最も複雑な部分の 1 つです。 Spring Security フレームワークのカスタム認証メカニズムを使用すると、アプリケーションに認証を簡単に実装できます。

AuthenticationProvider インターフェイスのauthenticate (認証認証) メソッドをオーバーライドすることで、認証ロジックをカスタマイズできます。サンプル コードは次のとおりです。

public class CustomAuthenticationProviderimplements AuthenticationProvider {

    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
         String username = authentication.getName();
         String password = authentication.getCredentials().toString();

         AuthUserDetails user = userDetailsService.loadUserByUsername(username);

         if (!passwordEncoder.matches(password, user.getPassword())) {
               throw new BadCredentialsException("Invalid username or password");
         }

         List<GrantedAuthority> authorities = new ArrayList<>();
         for (AuthRole role : user.getAuthorities()) {
               authorities.add(new SimpleGrantedAuthority(role.getRoleName()));
         }

         return new UsernamePasswordAuthenticationToken(user.getUsername(), null, authorities);
   }

  @Override
  public boolean supports(Class<?> authentication) {
         return authentication.equals(UsernamePasswordAuthenticationToken.class);
  }
ログイン後にコピー

}

上記のコードでは、カスタム認証のロジックを 1 行ずつ説明しています。まず受信ユーザー認証情報を取得し、次にカスタム認証サービスを通じて認証します。ユーザー名とパスワードが正しい場合は、Authentication オブジェクトが返されます。そうでない場合は、BadCredentialsException がスローされます。最後に、認証が成功すると、UsernamePasswordAuthenticationToken オブジェクトが返され、Spring Security はこのオブジェクトを後続の認証および認可処理に使用します。

  1. ロール承認メカニズムの実装

Spring Security で @PreAuthorize アノテーションを使用して、どのロールがどのリソースにアクセスできるかを定義できます。このアノテーションでは、SecurityConfig クラスで定義したロールを定義できます。

サンプルコード:

@RestController
@RequestMapping("/api/v1/users")
public class UserController {

@Autowired
private UserService userService;

@GetMapping("/")
@PreAuthorize("hasAuthority('USER')")
public List<UserDTO> getUsers() {
    List<User> users = userService.getUsers();
    return UserMapper.toDtos(users);
}

@PostMapping("/")
@PreAuthorize("hasAuthority('ADMIN')")
public void createUser(@RequestBody UserDTO userDTO) {
    User user = UserMapper.toEntity(userDTO);
    userService.createUser(user);
}
ログイン後にコピー

}

上記のコードでは、@PreAuthorize アノテーションによるセキュリティ認証のための 2 つのメソッド getUser() および createUser() を含むユーザー コントローラー クラスを定義します。 getUser() メソッドの @PreAuthorize アノテーションは「hasAuthority('USER')」であり、SecurityConfig クラスで定義されたロールに対応します。同様に、createUser() メソッドの @PreAuthorize アノテーションは「hasAuthority('ADMIN')」であり、SecurityConfig クラスで定義されたロールに対応します。

結論:

API のセキュリティは、Spring Security フレームワークを使用して簡単に確保できます。認証およびロール認可メカニズムをカスタマイズすることで、アプリケーションの安全性を高めることができます。 API のセキュリティ管理に Spring Security を使用する場合は、アプリケーションのセキュリティ要件を考慮し、要件に応じて段階的に構成して実装する必要があります。

以上がJava バックエンド開発: Spring Security を使用した API セキュリティの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Spring Security 6: cors() は非推奨となり、削除対象としてマークされています Spring Security 6: cors() は非推奨となり、削除対象としてマークされています Feb 10, 2024 pm 11:45 PM

次のコードがあります: publicSecurityFilterChainsecurityFilterChain(HttpSecurityhttp)throwsException{returnhttp.httpBasic().disable().cors().and().csrf().disable().authorizeHttpRequests().requestMatchers("

Java を使用して Spring Security SAML ベースのシングル サインオン システムを開発する方法 Java を使用して Spring Security SAML ベースのシングル サインオン システムを開発する方法 Sep 22, 2023 am 08:49 AM

Java を使用して SpringSecuritySAML に基づくシングル サインオン システムを開発する方法 はじめに: インターネットの急速な発展に伴い、ますます多くのアプリケーションが開発されています。これらのアプリケーションでは、ユーザー ログインは最も一般的な機能の 1 つです。ただし、エンタープライズ レベルのアプリケーションの場合、ユーザーは複数のシステムにログインする必要があるため、ユーザーのログイン エクスペリエンスが非常に低下します。この問題を解決するために登場したのがシングルサインオンシステム(SingleSign-On、以下SSO)です。単純

あなたに最適な Java のキャリアパスを選択するための 5 つの選択肢は何ですか? あなたに最適な Java のキャリアパスを選択するための 5 つの選択肢は何ですか? Jan 30, 2024 am 10:35 AM

Java業界には5つの雇用方向がありますが、どれがあなたに適していますか? Java は、ソフトウェア開発の分野で広く使用されているプログラミング言語として、常に人気があります。 Java の強力なクロスプラットフォーム性と豊富な開発フレームワークにより、Java 開発者にはさまざまな業界で幅広い雇用の機会があります。 Java 業界には、JavaWeb 開発、モバイル アプリケーション開発、ビッグ データ開発、組み込み開発、クラウド コンピューティング開発の 5 つの主要な雇用方向があります。それぞれの方向に特徴と利点がありますので、以下では 5 つの方向について説明します。

GO アクセス トークン (keycloak) を認証する GO アクセス トークン (keycloak) を認証する Feb 09, 2024 am 09:30 AM

GOを使用してアクセストークンの検証を実装しようとしています。しかし、オンラインで見た例では、TOKEN_SECRET を使用して検証しているだけのようです。ただし、私は Javaspring でのプログラミングに慣れているため、TOKEN_SECRET を使用する必要はありません。 jwk-set-uri を指定するだけで、有効性 (自動セキュリティ フィルターなど) がチェックされ、oauth サーバーと通信してこの検証が行われることがわかります。 Goにはoauthサーバーにリクエストを行ってトークンが有効かどうかを確認するライブラリはありませんか? oauth サーバーの userinfo エンドポイント http://localh にリクエストを送信することで、これを手動で実行できることはわかっています。

Java バックエンド開発: Akka HTTP を使用したリアクティブ API の構築 Java バックエンド開発: Akka HTTP を使用したリアクティブ API の構築 Jun 17, 2023 am 11:09 AM

今日の Web 開発では、リアクティブ プログラミングの重要性がますます高まっています。 AkkaHTTP は、Akka をベースにした高性能 HTTP フレームワークで、リアクティブな REST スタイル API の構築に適しています。この記事では、いくつかの実践的な例を示しながら、AkkaHTTP を使用してリアクティブ API を構築する方法を紹介します。始めましょう! AkkaHTTP を選択する理由 リアクティブ API を開発する場合、適切なフレームワークを選択することが重要です。 AkkaHTTP は非常に良い選択です。

Spring Security 権限制御フレームワークの使用ガイド Spring Security 権限制御フレームワークの使用ガイド Feb 18, 2024 pm 05:00 PM

バックエンド管理システムでは、通常、さまざまなユーザーのインターフェイスへのアクセスを制限するために、アクセス許可制御が必要です。ユーザーに特定の権限がない場合、特定のインターフェイスにアクセスできません。この記事では、waynboot-mall プロジェクトを例として、一般的なバックエンド管理システムがアクセス許可制御フレームワーク SpringSecurity を導入する方法を紹介します。 waynboot-mall プロジェクトアドレス: https://github.com/wayn111/waynboot-mall 1. SpringSecurity とは SpringSecurity は、Spring フレームワークをベースとした、強力かつ柔軟なセキュリティの提供を目的としたオープンソース プロジェクトです。 Java アプリケーションの場合。

Java を使用して Spring Security OAuth2 に基づくシングル サインオン システムを開発する方法 Java を使用して Spring Security OAuth2 に基づくシングル サインオン システムを開発する方法 Sep 20, 2023 pm 01:06 PM

Java を使用して SpringSecurityOAuth2 に基づくシングル サインオン システムを開発する方法 はじめに: インターネットの急速な発展に伴い、ユーザーにログインを必要とする Web サイトやアプリケーションがますます増えていますが、ユーザーは Web サイトやアプリケーションごとにログインすることを望んでいません。アカウント番号とパスワード。シングル サインオン システム (SingleSign-On、SSO と呼ばれる) を使用すると、この問題を解決できます。これにより、ユーザーは一度ログインした後は認証を繰り返すことなく、複数の Web サイトやアプリケーションにアクセスできるようになります。この記事で紹介するのは

Java バックエンド関数開発でクロスドメインリクエストを処理するにはどうすればよいですか? Java バックエンド関数開発でクロスドメインリクエストを処理するにはどうすればよいですか? Aug 05, 2023 am 09:40 AM

Java バックエンド関数開発でクロスドメインリクエストを処理するにはどうすればよいですか?フロントエンドとバックエンドが分離されている開発モデルでは、フロントエンドがバックエンド API インターフェイスにリクエストを送信し、JavaScript を通じてデータを取得するのが非常に一般的なシナリオです。ただし、ブラウザーの同一オリジン ポリシーにより、クロスドメイン リクエストには制限があります。クロスドメイン リクエストとは、フロントエンド ページが、AJAX などの方法を介して、異なるドメイン名、異なるポート、または異なるプロトコルを持つサーバーを要求することを意味します。この記事では、Java バックエンド関数の開発においてクロスドメイン リクエストを処理する一般的な方法をコード例とともに紹介します。クロスドメインを解決する

See all articles