🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Spring Security

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

Java

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Spring Boot

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

Q&A

解決済

1回答

4877閲覧

Spring Securityの認証設定が反映されない

shima_051

総合スコア0

Spring Security

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

Java

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Spring Boot

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

1グッド

0クリップ

投稿2020/11/24 02:58

前提・実現したいこと

現在、グループでSNSのようなWebアプリを作るため、日々制作しております。
今回はJavaのフレームワーク、「Spring boot」を使用して制作を始めました。

その中のSpring Securityを使ってユーザー認証を行おうと思ったのですが、どうしてもWebSecurityのコンフィグが反映されません。どうすれば反映されるでしょうか。

なお、この問題がどこまで広がっているか確認するため、本番のプロジェクトとは全く異なります。ただし、Mavenの依存関係は一緒です。

この原因が分かる方、ぜひよろしくお願いいたします。

発生している問題

Spring Securityは通常、依存関係に含めると全てのURLがBASIC認証で保護され、例えURLの末尾が"/"で合ったとしてもBASIC認証を通してログインしなければ到達できません。

その代わり、WebSecurityConfigurerAdapterを継承したクラスを用意すれば自由に設定をいじれる、という認識です。

ですが、私の環境では、このクラスがどうも反映されていないように思えます。
このクラスでオーバーライドしたconfigureメソッドに、"/"と"/login"は誰でも閲覧することが出来る、と記述しましたが、"/"に移動してもログインが求められました。

該当のソースコード

どこが問題なのか分からないので、全てのソースコードを貼り付けさせていただきます。

/src/main/java/com/test/security/Application.java

java

1package com.test.security; 2 3import org.springframework.boot.SpringApplication; 4import org.springframework.boot.autoconfigure.SpringBootApplication; 5import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; 6 7@SpringBootApplication(exclude = SecurityAutoConfiguration.class) 8public class Application { 9 public static void main(String[] args) throws Exception { 10 SpringApplication.run(Controllers.class, args); 11 } 12}

/src/main/java/com/test/security/Controllers.java

java

1package com.test.security; 2 3import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 4import org.springframework.stereotype.Controller; 5import org.springframework.web.bind.annotation.RequestMapping; 6 7@Controller 8@EnableAutoConfiguration 9public class Controllers { 10 11 @RequestMapping("/") 12 public String index() { 13 return "index"; 14 } 15 16 @RequestMapping("/hello") 17 public String hello() { 18 return "hello"; 19 } 20}

/src/main/java/com/test/security/WebSecurityConfig.java

java

1package com.test.security; 2 3import org.springframework.context.annotation.Configuration; 4import org.springframework.security.config.annotation.web.builders.HttpSecurity; 5import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; 6import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 7 8@Configuration 9@EnableWebSecurity 10public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 11 12 @Override 13 protected void configure(HttpSecurity http) throws Exception { 14 http.authorizeRequests() 15 .antMatchers("/", "/login") 16 .permitAll(); 17 } 18}

/pom.xml

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<project xmlns="http://maven.apache.org/POM/4.0.0" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>org.example</groupId> 8 <artifactId>test_spring_boot</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 <parent> 11 <groupId>org.springframework.boot</groupId> 12 <artifactId>spring-boot-starter-parent</artifactId> 13 <version>2.4.0</version> 14 </parent> 15 <dependencies> 16 <dependency> 17 <groupId>org.springframework.boot</groupId> 18 <artifactId>spring-boot-starter-security</artifactId> 19 </dependency> 20 <dependency> 21 <groupId>org.springframework.boot</groupId> 22 <artifactId>spring-boot-starter-web</artifactId> 23 </dependency> 24 <dependency> 25 <groupId>org.springframework.boot</groupId> 26 <artifactId>spring-boot-starter-thymeleaf</artifactId> 27 </dependency> 28 <dependency> 29 <groupId>org.springframework.boot</groupId> 30 <artifactId>spring-boot-starter-jdbc</artifactId> 31 </dependency> 32 <dependency> 33 <groupId>org.thymeleaf.extras</groupId> 34 <artifactId>thymeleaf-extras-springsecurity5</artifactId> 35 </dependency> 36 <dependency> 37 <groupId>org.springframework.boot</groupId> 38 <artifactId>spring-boot-devtools</artifactId> 39 <scope>runtime</scope> 40 <optional>true</optional> 41 </dependency> 42 <dependency> 43 <groupId>com.h2database</groupId> 44 <artifactId>h2</artifactId> 45 <scope>runtime</scope> 46 </dependency> 47 <dependency> 48 <groupId>org.projectlombok</groupId> 49 <artifactId>lombok</artifactId> 50 <version>1.18.16</version> 51 <scope>provided</scope> 52 </dependency> 53 </dependencies> 54 <build> 55 <plugins> 56 <plugin> 57 <groupId>org.springframework.boot</groupId> 58 <artifactId>spring-boot-maven-plugin</artifactId> 59 </plugin> 60 </plugins> 61 </build> 62</project>

/src/resources/templates/index.html
/src/resources/templates/login.html
/src/resources/templates/hello.html
(全て一緒です)

html

1<!DOCTYPE HTML> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4 <title>Swapping Positive</title> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 6</head> 7<body> 8</body> 9</html>

なお、今回はapplication.propertiesは記入しておりません。

試したこと

「Spring Security BASIC認証 無効化」と調べて出た記事を見て、Spring boot 2.xに対応していそうなものを色々とやってみたのですが、上手くいきませんでした。

csrf無効や、antMatchersmvcMatchersにする、application.propertiesにspring.autoconfigure.excludeの設定をする、などしてみましたが、全てダメでした。

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

  • InteliJ IDEA 2019.3 #IC-193.5233.102
  • jdk-11.0.4(IntelliJ標準) or jdk-13.0.1 (どちらでもダメでした)

以上となります。何か足りない情報がありましたらお伝え下さい。
それではよろしくお願いいたします。

gpsoft👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。

原因はApplication.javaの内部にあるmainメソッド内で実行されている、SpringApplication.runの第一引数に指定するクラスを、自身であるApplication.classにすることで解決いたしました。

つまり下記のようになります :

java

1public class Application { 2 public static void main(String[] args) throws Exception { 3 SpringApplication.run(Application.class, args); 4 } 5}

仕方なくSpring Tools Suiteを使ってどれが原因かを調べていたのですが、最初に生成される実行クラスをそのままにしたところ動いたので、もしやと思って引数を自身のクラスにしてみると、無事に実行できました。

この質問を見てくださった方、どうもありがとうございました。

投稿2020/11/25 09:49

shima_051

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問