spring security 特定のパスの認証をスキップする方法

spring

Webアプリを作っていると、認証処理を無視したいパスもでてくるはずです。

例えば、CSSやJSのパスは毎回認証処理を通す必要もありませんし、ログイン画面も基本誰でもアクセスするようにすべきです。

Spring Securityではこのようなパスの認証処理をスキップさせる方法があります。

[スポンサーリンク]

はじめに

特定のパスの認証をスキップさせる方法の解説ですが、以前紹介しましたspring securityの基本的なひな型プロジェクトの作り方で作成したソースをベースに解説を進めてきます。

Spring Securityの設定ファイル

特定のパスの認証をスキップさせるには、security="none"を使います。
css、js、imgの静的コンテンツのパスを認証スキップしています。
"/sample"のように自分で作ったパスもスキップすることが可能です。

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security-4.0.xsd">

    <http pattern="/css/*" security="none"/>
    <http pattern="/js/*" security="none"/>
    <http pattern="/img/*" security="none"/>
    <http pattern="/sample/*" security="none"/>

    <http auto-config="true" >
        <!-- 認可の設定 --> 
        <intercept-url pattern="/top*" access="hasAnyRole('ROLE_ADMIN', 'ROLE_USER')" />
        <intercept-url pattern="/admin*" access="hasRole('ROLE_ADMIN')" />
        <intercept-url pattern="/user*" access="hasRole('ROLE_USER')" />
        
        <!-- 権限なし時の遷移先 -->
        <access-denied-handler error-page="/403" />
        
        <!-- 認証のログイン処理 -->
        <form-login 
            login-page="/" 
            default-target-url="/top" 
            authentication-failure-url="/error" 
            login-processing-url="/j_spring_security_check"/>
        
        <!-- 認証のログアウト処理 -->
        <logout
            logout-url="/logout"
            logout-success-url="/"
            invalidate-session="true"/>
        <!-- anonymousユーザのROLE -->
        <anonymous granted-authority="ROLE_ANONYMOUS" />
    </http>

    <!-- ユーザとROLEを定義 --> 
    <authentication-manager>
        <authentication-provider>
            <user-service>
                <user name="admin" password="admin" authorities="ROLE_ADMIN" />
                <user name="user" password="user" authorities="ROLE_USER" />
            </user-service>
        </authentication-provider>
    </authentication-manager>


</beans:beans>

springとjavaのバージョン

springframeworknのバージョンは、4.0.1を使っています。
javaは、version 8を使っています。

さいごに

Spring Securityを使っていると、security="none"は必ずといっていいほど使う場面が登場します。

security="none"を多用しすぎると仕様としてイマイチ感がでてきますので、認証の設計段階で非認証のパスはしっかりと精査するようにしましょう。

それでは!