カテゴリ: Spring 更新日: 2025/06/03

Springの@Securedアノテーションの使い方を完全ガイド!初心者でもわかるセキュリティ設定

Springの@Securedアノテーション
Springの@Securedアノテーション

先生と生徒の会話形式で理解しよう

生徒

「先生、Springの@Securedアノテーションって何ですか?」

先生

@SecuredはSpring Securityのアノテーションで、特定のメソッドにアクセスできるユーザーのロール(権限)を設定するためのものなんだよ。」

生徒

「ロールって、管理者とか一般ユーザーみたいなものですか?」

先生

「そうだね。例えば、管理者だけが実行できるメソッドを@Secured("ROLE_ADMIN")と指定しておけば、一般ユーザーはそのメソッドにアクセスできなくなるんだ。」

生徒

「それは便利ですね!具体的な使い方を教えてください。」

先生

「では、サンプルコードを使って解説していくよ!」

1. @Securedアノテーションとは?

1. @Securedアノテーションとは?
1. @Securedアノテーションとは?

@Securedアノテーションは、Spring Securityで提供されているセキュリティ機能の一つです。このアノテーションを使用することで、メソッド単位でアクセス権限を設定することができます。特定のロールを持ったユーザーのみが、指定されたメソッドにアクセスできるように制御できるため、アプリケーションのセキュリティを向上させることができます。

2. @Securedアノテーションの基本的な使い方

2. @Securedアノテーションの基本的な使い方
2. @Securedアノテーションの基本的な使い方

まずは、@Securedアノテーションを使ったシンプルな例を見てみましょう。管理者のみがアクセスできるメソッドを定義します。


import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Service;

@Service
public class AdminService {

    @Secured("ROLE_ADMIN")
    public void performAdminTask() {
        System.out.println("管理者専用のタスクを実行中...");
    }
}

このAdminServiceクラスのperformAdminTaskメソッドは、ROLE_ADMIN権限を持つユーザーのみが実行できるようになります。

3. @Securedアノテーションを使うための設定

3. @Securedアノテーションを使うための設定
3. @Securedアノテーションを使うための設定

次に、@Securedアノテーションを使用するために、いくつかの設定が必要です。@EnableGlobalMethodSecurityアノテーションを使用して、メソッドセキュリティを有効にします。


import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfig {
    // セキュリティ設定の追加が可能
}

この設定をSecurityConfigクラスに追加することで、@Securedアノテーションが有効になります。

4. 具体的な利用シナリオ

4. 具体的な利用シナリオ
4. 具体的な利用シナリオ

例えば、ユーザーの管理機能を持つWebアプリケーションで、管理者のみがユーザー削除機能を使用できるようにしたい場合、以下のように@Securedアノテーションを使用します。


import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Secured("ROLE_ADMIN")
    public void deleteUser(Long userId) {
        System.out.println("ユーザーID " + userId + " を削除しました");
    }
}

このdeleteUserメソッドは、管理者権限を持つユーザーのみが実行可能です。一般ユーザーがアクセスしようとすると、アクセス拒否されます。

5. 実行結果を確認してみよう

5. 実行結果を確認してみよう
5. 実行結果を確認してみよう

では、実際にSpring Bootアプリケーションを起動して、AdminServiceのメソッドにアクセスしてみましょう。管理者権限のあるユーザーとして実行した場合は以下のような出力が得られます。


管理者専用のタスクを実行中...

一方、権限がないユーザーで実行すると、以下のようなエラーメッセージが表示されます。


Access is denied (user is not authorized)

6. 複数のロールを指定する場合

6. 複数のロールを指定する場合
6. 複数のロールを指定する場合

@Securedアノテーションでは、複数のロールを指定することも可能です。例えば、以下のように設定すれば、管理者とモデレーターの両方がメソッドにアクセスできるようになります。


@Secured({"ROLE_ADMIN", "ROLE_MODERATOR"})
public void manageContent() {
    System.out.println("コンテンツ管理タスクを実行中...");
}

このようにカンマで区切って複数の権限を指定することで、複数のユーザーグループにアクセス権を与えることができます。

7. まとめ

7. まとめ
7. まとめ

今回は、@Securedアノテーションの使い方について詳しく解説しました。@Securedは、Spring Securityのメソッドレベルのセキュリティ制御に非常に便利なアノテーションです。メソッドごとにアクセス権限を設定することで、アプリケーションのセキュリティを細かく管理することが可能になります。
例えば、管理者のみが実行できるメソッドを@Secured("ROLE_ADMIN")と設定することで、誤って一般ユーザーが実行することを防ぐことができます。また、複数のロールを指定することもでき、柔軟なアクセス制御が可能です。
@EnableGlobalMethodSecurityアノテーションとsecuredEnabled = trueの設定を追加するだけで簡単に利用できるため、Springアプリケーションのセキュリティを強化したい場合にはぜひ活用してみてください。特に、企業向けのWebアプリケーションでは、このようなメソッド単位のセキュリティ制御が必須となる場面が多く、非常に役立ちます。

さらに、ユーザーの役割に応じたアクセス制御は、システムの安定性とセキュリティ向上に直結します。
例えば、管理者権限のあるユーザーはユーザー管理機能にアクセスできるが、一般ユーザーにはアクセス権がないように設定できます。
@Securedアノテーションは設定が簡単で、柔軟に適用できるため、これからSpring Securityを導入するプロジェクトにおすすめです。

サンプルプログラムで再確認しよう


import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Service;

@Service
public class ContentService {

    // 管理者またはモデレーターのみ実行可能
    @Secured({"ROLE_ADMIN", "ROLE_MODERATOR"})
    public void moderateContent() {
        System.out.println("コンテンツの管理を行っています...");
    }

    // 一般ユーザーが利用できるメソッド
    public void viewContent() {
        System.out.println("コンテンツを表示しています...");
    }
}

この例では、moderateContentメソッドは管理者とモデレーターのみが実行でき、viewContentメソッドはすべてのユーザーがアクセス可能です。このように、必要に応じて権限を細かく設定できる点が@Securedの強みです。

先生と生徒の振り返り会話

生徒

@Securedアノテーションを使うと、メソッド単位でアクセス制御ができるんですね!」

先生

「その通りです。メソッド単位でロールベースのアクセス制御が簡単に実装できるので、セキュリティを強化したいときに便利ですよ。」

生徒

「設定も@EnableGlobalMethodSecurityを追加するだけで、すぐに使えるのが良いですね。」

先生

「その通りです。また、複数のロールをカンマ区切りで指定すれば、異なる権限を持つユーザーにも柔軟に対応できます。」

生徒

「これで、ユーザーごとに異なる機能を提供するアプリケーションのセキュリティが向上しそうです!」

先生

「その意気です!ぜひ自分のプロジェクトでも試してみてください。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

@Securedアノテーションとは何ですか?

@Securedは、Spring Securityで提供されるアノテーションで、メソッド単位でユーザーのロール(権限)に基づくアクセス制御を設定するために使用されます。

@Securedアノテーションを使うメリットは何ですか?

@Securedを使用すると、簡単にメソッドごとにアクセス制限を設定でき、セキュリティの強化や不正アクセスの防止が可能です。

@Securedを有効にするためには何を設定すれば良いですか?

Spring Securityの設定クラスに@EnableGlobalMethodSecurity(securedEnabled = true)を追加する必要があります。

@Securedで複数のロールを指定するにはどうすれば良いですか?

@Secured({"ROLE_ADMIN", "ROLE_MODERATOR"})のように、カンマ区切りで複数のロールを指定できます。

@Securedを使った具体例を教えてください。

管理者専用のタスクを実行するメソッドに@Secured("ROLE_ADMIN")を付与することで、ROLE_ADMIN権限を持つユーザーのみが実行可能になります。

@Securedと@EnableGlobalMethodSecurityはどう関係していますか?

@Securedを使用するには、@EnableGlobalMethodSecurityでsecuredEnabledをtrueに設定する必要があります。この設定でメソッドレベルのセキュリティが有効化されます。

@Securedと@PreAuthorizeの違いは何ですか?

@Securedはロールベースのシンプルなアクセス制御に適しており、@PreAuthorizeはより柔軟で複雑な条件を設定できる点が違いです。

@Securedを使用する際の注意点は何ですか?

ロール名は大文字で記述し、Spring Securityで設定されたロールと正確に一致させる必要があります。また、メソッドレベルでの設定が全体のセキュリティポリシーと矛盾しないように注意してください。

@Securedを使うことでどのようなアプリケーションに適用できますか?

@Securedは、管理者やモデレーターなど、異なる権限を持つユーザーに異なる機能を提供する必要があるアプリケーションで役立ちます。

初心者が@Securedを学ぶ際に最初に取り組むべきことは何ですか?

まずは、Spring Securityの基本的な設定を理解し、簡単なロールベースのアクセス制御を実装してみることから始めると良いでしょう。

Springの学習を効率化したい方へ

この記事の内容をもっと深く知るには、以下の入門書が最適です。

Spring Framework超入門をAmazonで見る
カテゴリの一覧へ
新着記事
New1
Java
Javaのラムダ式で注意したい変数キャプチャの落とし穴とは?代入と変数名のベストプラクティス解説
更新記事
New2
Spring
Springの@GetMappingアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
更新記事
New3
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New4
Spring
SpringDataJPAのJPAクエリメソッド「StartingWith」の使い方を完全ガイド!初心者向け解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Java
JavaのBooleanクラスの使い方を完全ガイド!初心者でもわかる真偽値の操作
No.3
Java&Spring記事人気No3
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.4
Java&Spring記事人気No4
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.5
Java&Spring記事人気No5
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.6
Java&Spring記事人気No6
JSP
JSPでif文・for文を使う方法!初心者でもわかるJavaとの違いと使い方
No.7
Java&Spring記事人気No7
Spring
SpringのModelクラスとaddAttributeメソッドの使い方を完全ガイド!初心者でも安心
No.8
Java&Spring記事人気No8
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説