質問するログイン新規登録

Q&A

0回答

636閲覧

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

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クリップ

投稿2022/06/16 16:32

0

0

前提

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問