簡體   English   中英

春季安全。 刪除一個攔截URL后不會重定向到登錄頁面

[英]Spring security. Doesn't redirect to login page after drop one intercept-url

我具有以下spring-security配置:

<http auto-config="true" pattern="/admin/**" authentication-manager-ref="adminAuthenticationManager">
        <form-login login-page="/loginAdmin" login-processing-url="/admin/j_spring_security_check_admin"
                    default-target-url="/admin"
                    authentication-failure-url="/loginAdminFailed"
                    authentication-success-handler-ref="authAdminSuccessHandler"/>

        <intercept-url pattern="/admin/**"
                       access="ROLE_SUPERADMIN, ROLE_TERMINAL_MODERATOR, ROLE_IMAGE_MODERATOR, ROLE_CAMPAIGN_MODERATOR, ROLE_FINANSIER, ROLE_MODERATOR"/>


        <logout logout-url="/logout" logout-success-url="/loginAdmin"/>
        <port-mappings>
            <port-mapping http="${http.port}" https="${https.port}"/>
        </port-mappings>
    </http>

現在,當我匿名並嘗試轉到http://localhost:8080/admin
它將我重定向到http://localhost:8080/loginAdmin

在調試中,我看到以下控制器方法:

@RequestMapping(value = "/admin", method = RequestMethod.GET)
    public String index(Principal principal, HttpSession session) {
        session.setAttribute("userName", principal.getName());
        return "admin/index";
}

不調用。

當我刪除

<intercept-url pattern="/admin/**"
                       access="ROLE_SUPERADMIN, ROLE_TERMINAL_MODERATOR, ROLE_IMAGE_MODERATOR, ROLE_CAMPAIGN_MODERATOR, ROLE_FINANSIER, ROLE_MODERATOR"/>

從配置中,我看到以下情況:輸入http://localhost:8080/admin程序執行轉到控制器方法,並且看到NullPointer異常。 預期結果-重定向到http://localhost:8080/loginAdmin

你能解釋會發生什么嗎?
為什么我的零錢會有這種副作用?

通常有一個稱為會話驗證的概念進行身份驗證。 默認情況下,Web服務器將在cookie名稱JSESSIONID創建唯一的會話ID,並將其附加在HttpResponse並存儲在客戶端瀏覽器的內存中。 如果用戶登錄到Web應用程序,則Web服務器應使登錄頁面中的當前會話ID無效(如上代碼中的/ loginadmin),並且應創建一個新的會話ID,並根據每個請求將其添加到瀏覽器的cookie名稱JSESSIONID 。從客戶端瀏覽器發送的Web應用程序應檢查該會話對於經過身份驗證的用戶而言是否不是新會話,然后允許在控制器功能內執行代碼。

注銷后,會話ID應該無效,然后再次分配一個新的唯一會話ID。 遵循此技術可防止session hijacking attack 因此,當注銷的用戶或任何試圖在未經身份驗證的情況下導航到中間任何URL的匿名用戶時,服務器應驗證該會話是否有效,然后允許進一步執行該功能,否則將重定向到登錄頁面URL。

因此,在春季安全性中,您無需實現這些與安全性相關的功能。 它具有此會話驗證功能和一些其他功能。 您只需要提及頁面的網址及其用戶角色,它將對其進行處理。

在使用spring, struts, JSF, etc. Web框架之前spring, struts, JSF, etc.您應該完全了解Java Servlet。 此鏈接可能是有用的http://www.journaldev.com/1907/java-servlet-session-management-tutorial-with-examples-of-cookies-httpsession-and-url-rewriting

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM