Spring Securityのログを有効にするにはどうすればよいですか?


95

ログインユーザーを処理するようにSpringSecurityを設定しています。ユーザーとしてログインし、ログインに成功するとアクセス拒否エラーページが表示されます。Spring Securityライブラリのデバッグを有効にする方法がわからないため、ユーザーに実際に割り当てられている役割や、アクセスを拒否するルールがわかりません。

私のセキュリティxml:

<?xml version="1.0" encoding="UTF-8"?>
<beans ... >
    <!-- security -->

    <security:debug/><!-- doesn't seem to be working -->

    <security:http auto-config="true">

        <security:intercept-url pattern="/Admin**" access="hasRole('PROGRAMMER') or hasRole('ADMIN')"/>
        <security:form-login login-page="/Load.do"
            default-target-url="/Admin.do?m=loadAdminMain"
            authentication-failure-url="/Load.do?error=true"
            username-parameter="j_username"
            password-parameter="j_password"
            login-processing-url="/j_spring_security_check"/>
        <security:csrf/><!-- enable Cross Site Request Forgery protection -->
    </security:http>

    <security:authentication-manager>
        <security:authentication-provider>
            <security:jdbc-user-service data-source-ref="loginDataSource"
                users-by-username-query="SELECT username, password, active FROM userinformation WHERE username = ?"
                authorities-by-username-query="
                    SELECT ui.username, r.rolename 
                    FROM role r, userrole ur, userinformation ui 
                    WHERE ui.username=? 
                    AND ui.userinformationid = ur.userinformationid 
                    AND ur.roleid = r.roleid "
            />
            <security:password-encoder hash="md5"/>
        </security:authentication-provider>
    </security:authentication-manager>
</beans>

log4j.logger.org.springframework.security=DEBUGlog4j.propertiesに追加してみました

Spring Securityのデバッグ出力を取得するにはどうすればよいですか?


2
これがあなたを助けることができるならば、このリンクをチェックしてください。
pise 2015年

1
@piseこれを回答として追加して(少なくとも関連する抜粋/要約を含めて)、これを解決済みとしてマークできますか?
マーティンカーニー2015

:この質問への答えを参照してくださいstackoverflow.com/questions/7840088/...
nevster

えー、それを答えとして追加しようとしたので、SOはそれをコメントに変換しました。
nevster 2016年

回答:


175

Spring Bootを使用していると仮定すると、別のオプションは次のものをに入れることですapplication.properties

logging.level.org.springframework.security=DEBUG

これは、他のほとんどのSpringモジュールでも同じです。

Spring Bootを使用していない場合は、ログ設定でプロパティを設定してみてください(例:logback)。

これもapplication.ymlバージョンです:

logging:
  level:
    org:
      springframework:
        security: DEBUG

2
これはSpringBootを想定していますか?
ジョンキャメリン

1
@JohnCamerinはい、そうです。でのログレベルの設定application.propertiesは、SpringBootの機能です。Spring Bootを使用しない場合はorg.springframework.security、他の方法(logback.xmlなど)でログレベルを設定できます。
DarioSeidl19年

1
WebFluxのためにそれが動作していません。github.com/spring-projects/spring-security/issues/5758
bzhu

追加org.springframework.web.corsして、Corsプロセッサログを有効にします。
SIGGEN

72

@EnableWebSecurity注釈のオプションを使用して、デバッグサポートを簡単に有効にできます。

@EnableWebSecurity(debug = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    …
}

どの程度EnableWebFluxSecurity、それはデバッグオプションを持っていない
bzhu

1
ああ、面白い。しかし、私はWebFluxの経験がありません。
MichaelPiefel19年

1
application.propertiesからこのフラグを制御する方法はありますか
AnkitKatiyar20年

25

Springを使用した基本的なデバッグDebugFilterは、次のように構成できます。

@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.debug(true);
    }
}

12
これはかなり弱いデバッグログです。リクエストヘッダーと「セキュリティフィルターチェーン」のみを出力します。アクセスの問題を追跡する場合は、まったく役に立ちません。
クロエ

4

@EnableWebSecurityアノテーションのオプションを使用して、デバッグサポートを簡単に有効にできます。

@EnableWebSecurity(debug = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    …
}

アプリケーション内のプロファイル固有の制御が必要な場合- {profile} .propertiesファイル

org.springframework.security.config.annotation.web.builders.WebSecurity.debugEnabled=false

詳細な投稿を取得する:http//www.bytefold.com/enable-disable-profile-specific-spring-security-debug-flag/


0

webfluxリアクティブアプリのSpringセキュリティログがバージョン5.4.0-M2から利用できるようになりました(コメントの@bzhu言及されているようにSpring Securityのログを有効にするにはどうすればよいですか?

これがGAリリースに入るまで、このマイルストーンリリースをgradleで取得する方法は次のとおりです

repositories {
    mavenCentral()
    if (!version.endsWith('RELEASE')) {
        maven { url "https://repo.spring.io/milestone" }
    }
}

// Force earlier milestone release to get securing logging preview
// https://docs.spring.io/spring-security/site/docs/current/reference/html5/#getting-gradle-boot
// https://github.com/spring-projects/spring-security/pull/8504
// https://github.com/spring-projects/spring-security/releases/tag/5.4.0-M2
ext['spring-security.version']='5.4.0-M2'
dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }

}

-7

デフォルトでは、Spring Securityは、ログイン後にユーザーが最初に要求したURL(この場合は/Load.do)にユーザーをリダイレクトします。

この動作を無効にするには、always-use-default-targetをtrueに設定できます。

 <security:http auto-config="true">

    <security:intercept-url pattern="/Admin**" access="hasRole('PROGRAMMER') or hasRole('ADMIN')"/>
    <security:form-login login-page="/Load.do"
        default-target-url="/Admin.do?m=loadAdminMain"
        authentication-failure-url="/Load.do?error=true"
        always-use-default-target = "true"
        username-parameter="j_username"
        password-parameter="j_password"
        login-processing-url="/j_spring_security_check"/>
    <security:csrf/><!-- enable Cross Site Request Forgery protection -->
</security:http>

3
これはopの質問には答えません。
Madbreaks 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.