カテゴリ: Spring 更新日: 2026/08/03

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

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

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

生徒

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

先生

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

生徒

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

先生

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

生徒

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

先生

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

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

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

@Securedアノテーションは、Spring Securityが提供する「メソッド単位でのアクセス制御」を行うための仕組みです。簡単に言うと、「この処理は、特定の権限を持つ人だけが実行できるようにする」というルールを、コードに直接書けるアノテーションです。

Webアプリでは、すべてのユーザーに同じ操作を許可すると危険なケースがあります。例えば「管理画面の操作」「データの削除」「重要な設定変更」などは、誰でも実行できてはいけません。@Securedを使うことで、こうした重要な処理を安全に守ることができます。

プログラミング未経験の方は、「入口にカギをかけるイメージ」をすると分かりやすいです。@Securedは、メソッドという部屋の前に置くカギのような存在で、正しいロール(権限)を持っているユーザーだけが中に入れます。

例えば、次のように書くと「管理者だけが実行できる処理」を表現できます。


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

public class SampleService {

    @Secured("ROLE_ADMIN")
    public void adminOnlyAction() {
        System.out.println("管理者だけが実行できる処理です");
    }
}

この例では、ROLE_ADMINという権限を持っていないユーザーがadminOnlyActionを実行しようとすると、自動的にアクセスが拒否されます。複雑な条件分岐を書く必要がなく、シンプルにセキュリティ対策を実装できるのが@Securedの大きな特徴です。

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

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

@Securedアノテーションは、Spring Securityで「この処理は誰が実行していいのか」をシンプルに指定できる仕組みです。 プログラミング未経験の方は、「特定の人だけが使える機能に鍵をかけるもの」と考えるとイメージしやすいでしょう。 ここでは、管理者だけが実行できる処理を例に、@Securedの基本的な書き方を確認します。


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

@Service
public class AdminService {

    // 管理者(ROLE_ADMIN)だけが実行できるメソッド
    @Secured("ROLE_ADMIN")
    public void performAdminTask() {
        System.out.println("管理者専用のタスクを実行中...");
    }
}

この例では、AdminServiceクラスのperformAdminTaskメソッドに @Secured("ROLE_ADMIN")を付けています。 これは「ROLE_ADMINという権限を持つユーザーだけが、このメソッドを実行できる」 という意味です。

もし一般ユーザー(管理者権限を持たない人)がこのメソッドを呼び出そうとすると、 Spring Securityが自動的にチェックを行い、処理は実行されません。 つまり、@Securedを付けるだけで、 自分でif文を書かなくても安全なアクセス制御ができるのが大きなメリットです。

このように、@Securedは「この処理は誰専用なのか」をコード上ではっきり示せるため、 初心者でも理解しやすく、実務でもよく使われる基本的な権限制御の方法です。

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

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

ここでは、Spring Securityで@Securedアノテーションを使うための最初の準備設定を行います。 @Securedは「このメソッドは、特定の権限を持つ人だけが使える」というルールを決めるための仕組みです。 ただし、何も設定しないままではSpringはこのルールを認識してくれません。

そこで必要になるのが、@EnableGlobalMethodSecurityアノテーションです。 これは「メソッドごとのセキュリティチェックを有効にしますよ」とSpringに伝えるスイッチのような役割を持っています。 初心者の方は、「ドアにカギを付ける前に、カギを使える状態にする設定」だと考えるとイメージしやすいです。


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 {
    // 今回は設定を有効にするだけなので、中身は空でOKです
}

このSecurityConfigクラスを作成して、 @EnableGlobalMethodSecurity(securedEnabled = true)を指定することで、 @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の基本的な設定を理解し、簡単なロールベースのアクセス制御を実装してみることから始めると良いでしょう。
生成AIを基礎から学びたい方へ

ChatGPTなどの生成AIをこれから学びたい方に向けて、AIスキルアカデミーの口コミ・評判、料金、無料セミナーの内容を詳しくまとめています。

AIスキルアカデミーの口コミ・評判を詳しく見る
カテゴリの一覧へ
新着記事
New1
Spring
Spring Bootの@RequestParamの使い方を解説!初心者でもわかるGETリクエストのパラメータ取得
更新記事
New2
Java
JavaのLocalDateTime.formatメソッドを完全解説!初心者でもわかる日時フォーマット入門
更新記事
New3
Java
Javaのラムダ式とStreamのfilterを徹底解説!初心者でもわかる条件による絞り込み処理
更新記事
New4
Servlet
JavaのServletExceptionクラスを初心者向けに徹底解説!
更新記事
人気記事
No.1
Java&Spring記事人気No1
Servlet
JavaサーブレットのdoPostメソッドとは?初心者向けにやさしく解説!
No.2
Java&Spring記事人気No2
Servlet
JavaのHttpServletRequestWrapperとgetSessionメソッドの使い方を徹底解説!初心者向けServletのセッション管理入門
No.3
Java&Spring記事人気No3
Servlet
JavaのServletExceptionクラスを初心者向けに徹底解説!
No.4
Java&Spring記事人気No4
Servlet
JavaのHttpServletResponseクラスを初心者向けに徹底解説!
No.5
Java&Spring記事人気No5
Java
JavaのStringクラスとlengthメソッドを完全解説!初心者でも理解できる文字列の長さ取得の使い方
No.6
Java&Spring記事人気No6
Servlet
JavaのHttpSessionAttributeListenerとattributeRemovedメソッドの使い方を徹底解説!初心者でもわかるセッション属性の削除と監視
No.7
Java&Spring記事人気No7
Java
Javaのクラスとインスタンス化、コンストラクタの使い方完全ガイド!初心者でもわかるオブジェクト指向の基礎
No.8
Java&Spring記事人気No8
Servlet
JavaのHttpSessionインターフェースとgetSessionContextメソッドを徹底解説!初心者でもわかるセッション管理の基本