1. 概要

このクイックチュートリアルでは、SpringThymeleafを使用したセキュリティに焦点を当てます。セキュリティ方言の使用法を示すSpring Bootアプリケーションを作成します。

フロントエンドテクノロジーの選択肢はThymeleafです。これは、SpringMVCフレームワークとの良好な統合を備えた最新のサーバー側Webテンプレートエンジンです。 詳細については、紹介記事をご覧ください。

最後に、Spring Security DialectはThymeleafエクストラモジュールであり、当然、これらの両方を統合するのに役立ちます。

Spring Bootチュートリアルの記事で作成した単純なプロジェクトを使用します。 ThymeleafチュートリアルとSpringもあり、標準のThymeleaf構成を見つけることができます。

2. 依存関係

まず、Maven pom.xmlに新しい依存関係を追加しましょう。

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>

常に最新バージョンを使用することをお勧めします。これは、 MavenCentralで乗り越えることができます。

3. Springセキュリティ構成

次に、Springセキュリティの構成を定義しましょう。

また、セキュリティ方言の使用法を示すために、少なくとも2人の異なるユーザーが必要です。

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    // [...] 
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) 
      throws Exception {
        auth
          .inMemoryAuthentication()
          .withUser("user").password(passwordEncoder().encode("password")).roles("USER")
          .and()
          .withUser("admin").password(passwordEncoder().encode("admin")).roles("ADMIN");
    }
    
    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

ご覧のとおり、 configureGlobal(AuthenticationManagerBuilder auth)では、ユーザー名とパスワードを使用して2人のユーザーを定義しています。 これらを使用して、アプリケーションにアクセスできます。

ユーザーにはそれぞれADMINUSERの異なる役割があり、役割に基づいて特定のコンテンツを提示できます。

4. セキュリティ方言

Spring Security方言を使用すると、ユーザーの役割、権限、またはその他のセキュリティ表現に基づいてコンテンツを条件付きで表示できます。 また、春へのアクセスを提供します認証物体。

セキュリティ方言の例が含まれているインデックスページを見てみましょう。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>Welcome to Spring Security Thymeleaf tutorial</title>
    </head>
    <body>
        <h2>Welcome</h2>
        <p>Spring Security Thymeleaf tutorial</p>
        <div sec:authorize="hasRole('USER')">Text visible to user.</div>
        <div sec:authorize="hasRole('ADMIN')">Text visible to admin.</div>
        <div sec:authorize="isAuthenticated()">
            Text visible only to authenticated users.
        </div>
        Authenticated username:
        <div sec:authentication="name"></div>
        Authenticated user roles:
        <div sec:authentication="principal.authorities"></div>
    </body>
</html>

Spring SecurityDialectに固有の属性sec:authorizeおよびsec:authenticationを確認できます。

これらについて1つずつ説明しましょう。

4.1. sec:authorizeを理解する

簡単に言うと、 sec:authorize 属性を使用して、表示されるコンテンツを制御します。

たとえば、役割USERを持つユーザーにのみコンテンツを表示したい場合は、次のことができます。

また、認証されたすべてのユーザーへのアクセスを拡大したい場合は、次の式を使用できます。

4.2. sec:authenticationを理解する

Spring Security Authentication インターフェースは、認証されたプリンシパルまたは認証要求に関する有用なメソッドを公開します。

Thymeleafを使用して認証オブジェクトにアクセスする 、簡単に使用できます

また

前者は認証されたユーザーの名前へのアクセスを許可し、後者は認証されたユーザーの役割へのアクセスを許可します。

5. 概要

この記事では、単純なSpringBootアプリケーションでThymeleafのSpringSecurityサポートを使用しました。

いつものように、この記事に示されているコードの動作バージョンは、GitHubリポジトリで入手できます。