1. 概要

このチュートリアルでは、 Spring Security Taglibs を見ていきます。これは、JSPでセキュリティ情報にアクセスしてセキュリティ制約を適用するための基本的なサポートを提供します。

2. Mavenの依存関係

まず、spring-security-taglibs依存関係をpom.xmlに追加しましょう。

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-taglibs</artifactId>
    <version>5.2.2.RELEASE</version>
</dependency>

3. Taglibsの宣言

ここで、タグを使用する前に、JSPファイルの先頭にあるtaglibをインポートする必要があります。

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

これを追加すると、SpringSecurityのタグをsecプレフィックスで指定できるようになります。

4. authorizeタグ

4.1. アクセス

私たちのアプリケーションでは、特定の役割またはユーザーに対してのみ表示されるべき情報がある場合があります。

この場合、authorizeタグを使用できます。

<sec:authorize access="!isAuthenticated()">
  Login
</sec:authorize>
<sec:authorize access="isAuthenticated()">
  Logout
</sec:authorize>

さらに、認証されたユーザーが特定の役割を持っているかどうかを確認できます。

<sec:authorize access="hasRole('ADMIN')">
    Manage Users
</sec:authorize>

また、 access の値として、任意のSpringSecurity式を使用できます。

  • hasAnyRole(’ADMIN’、’USER’)は、現在のユーザーがリストされている役割のいずれかを持っている場合、trueを返します
  • isAnonymous()は、現在のプリンシパルが匿名ユーザーの場合、trueを返します。
  • isRememberMe()は、現在のプリンシパルがremember-meユーザーの場合、trueを返します。
  • isFullyAuthenticated()は、ユーザーが認証されており、匿名ユーザーでも記憶ユーザーでもない場合、trueを返します。

4.2.  url

それ以外に、特定のURLへのリクエストの送信を許可されているユーザーを確認できます。

<sec:authorize url="/userManagement">
    <a href="/userManagement">Manage Users</a>
</sec:authorize>

4.3. デバッグ

テストシナリオなどで、UIをより細かく制御したい場合があります。 Spring Securityがこれらの無許可のセクションのレンダリングをスキップする代わりに、たとえばapplication.propertiesファイルでspring.security.disableUISecurity = trueを設定できます。

これを行うと、authorizeタグはその内容を非表示にしません。 代わりに、コンテンツを次のようにラップします 代わりにタグ。 次に、CSSを使用してレンダリングを自分でカスタマイズできます。

CSSを介してコンテンツを非表示にすることは安全ではありませんが、覚えておいてください。 ユーザーはソースを表示するだけで、許可されていないコンテンツを確認できます。

5. 認証タグ

また、「おかえりなさい、キャロル!」など、ログインしているユーザーの詳細を表示したい場合もあります。 サイトに。

このために、認証タグを使用します。

<sec:authorize access="isAuthenticated()">
    Welcome Back, <sec:authentication property="name"/>
</sec:authorize>

6. csrfInputタグ

うまくいけば、アプリでSpringSecurityのCSRF防御が有効になっています。

その場合、SpringSecurityはすでにCSRF非表示フォーム入力を内部に挿入しています私たちのためのタグ。

でも使いたい場合は

代わりは、 csrfInputを使用して、SpringSecurityがこの非表示の入力フィールドを配置する場所を手動で指定できます。

<form method="post" action="/do/something">
    <sec:csrfInput />
    Text Field:<br />
    <input type="text" name="textField" />
</form>

CSRF保護が有効になっていない場合、このタグは何も出力しません。

7. csrfMetaTagsタグ

または、 JavascriptでCSRFトークンにアクセスする場合は、トークンをメタタグとして挿入することをお勧めします。

これは、csrfMetaTagsタグを使用して実行できます。

<html>
    <head>
        <title>JavaScript with CSRF Protection</title>
        <sec:csrfMetaTags />
        <script type="text/javascript" language="javascript">
            var csrfParameter = $("meta[name='_csrf_parameter']").attr("content");
            var csrfHeader = $("meta[name='_csrf_header']").attr("content");
            var csrfToken = $("meta[name='_csrf']").attr("content");
        </script>
    </head>
    <body>
    ...
    </body>
</html>

繰り返しになりますが、CSRF保護が有効になっていない場合、このタグは何も出力しません。

8. 結論

この簡単な記事では、SpringSecurityの一般的なtaglibのユースケースに焦点を当てました。

そして、私たちが学んだように、それらは認証と承認を意識したJSPコンテンツをレンダリングするのに非常に役立ちます。

すべての例は、いつものように、Githubにあります。