質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
Spring Security

Spring Securityは、Springのサブプロジェクトの一つでWebアプリケーションに必要な機能を追加します。正規ユーザーであるかを確認するための「認証機能」と、ユーザーのアクセスを制御する「認可機能」を簡単に追加することが可能です。

Spring MVC

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

受付中

.mvcMatchers("/admin").hasAuthority("ROLE_ADMIN")が機能しない

uratarosu
uratarosu

総合スコア49

Spring Security

Spring Securityは、Springのサブプロジェクトの一つでWebアプリケーションに必要な機能を追加します。正規ユーザーであるかを確認するための「認証機能」と、ユーザーのアクセスを制御する「認可機能」を簡単に追加することが可能です。

Spring MVC

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0回答

0グッド

0クリップ

422閲覧

投稿2022/06/16 16:32

前提

Springsecurity5を使用していて、
mvcMatchers("/admin").hasAuthority("ROLE_ADMIN")を指定しましたが、
ROLE_ADMIN権限のついたユーザーのみ/adminに遷移させたい
(現在、どのユーザーも403に遷移する)

「ROLE_ADMINの権限の付与されていたら」
「"ROLE_ADMIN" のロールを持つユーザーに制限」
をかける方法としてmvcMatchers("/admin").hasAuthority("ROLE_ADMIN")記事が載っていたのですが、そもそもロールや権限の付与はどのように行うのでしょうか。
data.sqlのauthorityにROLE_ADMINがあれば、権限を付与されているのでは?と思っているのですが、遷移されません。この考え方が違うのでしょうか。

発生している問題・エラーメッセージ

エラー文は出ず、403に遷移する

該当のソースコード

@EnableWebSecurity public class SecurityConfig{ @Autowired UserDetailsService userDetailsService; @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.formLogin(login -> login .loginProcessingUrl("/login").loginPage("/login") .defaultSuccessUrl("/") .failureUrl("/login").permitAll() .usernameParameter("username").passwordParameter("password") ).logout(logout -> logout .logoutSuccessUrl("/") ).authorizeHttpRequests(authorize -> authorize .requestMatchers(PathRequest.toStaticResources() .atCommonLocations()).permitAll() .mvcMatchers("/").permitAll() .mvcMatchers("/edit").permitAll() .mvcMatchers("/admin").hasAuthority("ROLE_ADMIN") .anyRequest() .authenticated() ); return http.build(); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } }

data.sql

1INSERT INTO user(username, password, authority) 2VALUES('admin', 'passが入ってます', 'ROLE_ADMIN'), 3('user', 'passが入ってます', 'ROLE_USER');

schema.sql

1DROP TABLE IF EXISTS user; 2 3CREATE TABLE user 4( 5 id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 6 username VARCHAR(100) NOT NULL UNIQUE, 7 password VARCHAR(100) NOT NULL, 8 authority VARCHAR(100) 9); 10

試したこと

「ROLE_ADMINの権限の付与されていたら」
「"ROLE_ADMIN" のロールを持つユーザーに制限」
で調べて、値をauthorityに変更

「ADMIN」を「ROLE_ADMIN」に変更

補足情報(FW/ツールのバージョンなど)

java11
Spring4
MyBatis
MySQL

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Spring Security

Spring Securityは、Springのサブプロジェクトの一つでWebアプリケーションに必要な機能を追加します。正規ユーザーであるかを確認するための「認証機能」と、ユーザーのアクセスを制御する「認可機能」を簡単に追加することが可能です。

Spring MVC

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。