Làm cách nào để kích hoạt ghi nhật ký cho Spring Security?


94

Tôi đang thiết lập Spring Security để xử lý người dùng đăng nhập. Tôi đã đăng nhập với tư cách người dùng và được đưa đến trang báo lỗi Access Denied khi đăng nhập thành công. Tôi không biết người dùng của mình thực sự đã được gán những vai trò nào hoặc quy tắc khiến quyền truy cập bị từ chối, vì tôi không thể tìm ra cách bật gỡ lỗi cho thư viện Spring Security.

Xml bảo mật của tôi:

<?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>

Tôi cũng đã thử thêm log4j.logger.org.springframework.security=DEBUGvào log4j.properties của mình

Làm cách nào để lấy đầu ra gỡ lỗi cho Spring Security?


2
kiểm tra liên kết này Nếu điều này có thể giúp bạn.
pise

1
@pise bạn có thể thêm câu đó làm câu trả lời (với ít nhất một đoạn trích / tóm tắt có liên quan) để tôi có thể đánh dấu câu này là đã giải quyết được không?
Martin Carney

Xem câu trả lời cho câu hỏi này: stackoverflow.com/questions/7840088/…
nevster,

Heh - đã cố gắng thêm nó như một câu trả lời và SO chuyển nó thành một nhận xét.
nevster

Câu trả lời:


172

Giả sử bạn đang sử dụng Spring Boot, một tùy chọn khác là đặt nội dung sau vào application.properties:

logging.level.org.springframework.security=DEBUG

Điều này cũng tương tự đối với hầu hết các mô-đun Spring khác.

Nếu bạn không sử dụng Spring Boot, hãy thử đặt thuộc tính trong cấu hình ghi nhật ký của bạn, ví dụ: đăng nhập.

Đây cũng là phiên bản application.yml:

logging:
  level:
    org:
      springframework:
        security: DEBUG

2
Điều này có giả sử Spring Boot không?
John Camerin

1
@JohnCamerin Đúng vậy. Đặt các cấp độ đăng nhập application.propertieslà một tính năng Spring Boot. Nếu bạn không sử dụng Spring Boot, bạn có thể đặt cấp độ nhật ký org.springframework.securitybằng cách khác (ví dụ: trong logback.xml của bạn).
Dario Seidl

1
Đối với WebFlux nó không làm việc: github.com/spring-projects/spring-security/issues/5758
bzhu

Thêm org.springframework.web.corsđể bật nhật ký bộ xử lý Cors.
Siggen

70

Bạn có thể dễ dàng bật hỗ trợ gỡ lỗi bằng cách sử dụng một tùy chọn cho @EnableWebSecuritychú thích:

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

Làm thế nào về EnableWebFluxSecurity, nó không có tùy chọn gỡ lỗi
bzhu

1
Ah, thú vị. Tuy nhiên, tôi không có kinh nghiệm với WebFlux.
Michael Piefel

1
có cách nào để kiểm soát cờ này từ application.properties
Ankit Katiyar

25

Gỡ lỗi cơ bản bằng Spring DebugFiltercó thể được cấu hình như sau:

@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

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

11
Đó là một số ghi nhật ký gỡ lỗi khá yếu. Nó chỉ in ra các tiêu đề yêu cầu và "Chuỗi bộ lọc bảo mật". Không hữu ích chút nào khi theo dõi các vấn đề truy cập.
Chloe

4

Bạn có thể dễ dàng bật hỗ trợ gỡ lỗi bằng cách sử dụng tùy chọn cho chú thích @EnableWebSecurity:

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

Nếu bạn cần kiểm soát theo cấu hình cụ thể, tệp .properties trong ứng dụng của bạn- {profile}

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

Nhận bài đăng chi tiết: http://www.bytefold.com/enable-disable-profile-specific-spring-security-debug-flag/


0

Ghi nhật ký bảo mật mùa xuân cho các ứng dụng phản ứng webflux hiện có sẵn bắt đầu từ phiên bản 5.4.0-M2 (như được đề cập bởi @bzhu trong nhận xét Làm cách nào để bật ghi nhật ký cho Spring Security? )

Cho đến khi điều này có trong bản phát hành GA, đây là cách để có được bản phát hành quan trọng này trong 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

Theo mặc định, Spring Security chuyển hướng người dùng đến URL mà anh ta yêu cầu ban đầu (/Load.do trong trường hợp của bạn) sau khi đăng nhập.

Bạn có thể đặt always-use-default-target thành true để vô hiệu hóa hành vi này:

 <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
Điều này không trả lời câu hỏi của op.
Madbreaks
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.