簡體   English   中英

如何重定向到簡單頁面?

[英]How to redirect to a simple page?

我正在使用Spring Security,但有一個大問題。

用戶登錄並關閉頁面后,當他再次進入“ mysite.com”時,應將他重定向到“ / dashboard”,但他收到錯誤404,找不到頁面。

他再次登錄的唯一方法是使用其他瀏覽器或服務器。

我的配置出了什么問題?? 如果他已經登錄,它不會重定向到/ dashboard。

  @Override
protected void configure(HttpSecurity http) throws Exception {

    http.authorizeRequests()
            .antMatchers("/settings", "/users", "/teams", "/docker-status", "/container-creation").hasAuthority("Administrator")
            .anyRequest().authenticated()
            .and()
            .formLogin().permitAll()
                .loginPage("/login").permitAll()
                .defaultSuccessUrl("/dashboard")
                .failureUrl("/login?error")
                .successHandler(authenticationSuccessHandler)
            .and()
            .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login")
                .logoutSuccessHandler(logoutSuccessHandler)
            .and()
            .exceptionHandling().accessDeniedHandler(accessDeniedHandler);
}

表單和基本登錄選項

您可能想知道提示您登錄時登錄表單的來源,因為我們沒有提及任何HTML文件或JSP。 實際上,由於我們沒有為登錄頁面明確設置URL,Spring Security會基於已啟用的功能並使用處理提交的登錄的URL的標准值(用戶將使用的默認目標URL)自動生成一個URL。登錄后發送到,等等。 但是,名稱空間提供了大量支持,可讓您自定義這些選項。 例如,如果要提供自己的登錄頁面,則可以使用:

<http>
<intercept-url pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<intercept-url pattern="/**" access="ROLE_USER" />
<form-login login-page='/login.jsp'/>
</http>

還要注意,我們添加了一個額外的intercept-url元素,以表示對登錄頁面的任何請求應可用於匿名用戶[3],還可以使用AuthenticatedVoter類以獲取有關如何處理值IS_AUTHENTICATED_ANONYMOUSLY的更多詳細信息。 否則,請求將被模式/ **匹配,並且將無法訪問登錄頁面本身! 這是一個常見的配置錯誤,將導致應用程序中的無限循環。 如果您的登錄頁面受到保護,Spring Security將在日志中發出警告。 通過為模式定義一個單獨的http元素,也可以使所有匹配特定模式的請求完全繞過安全過濾器鏈,如下所示:

<http pattern="/css/**" security="none"/>
<http pattern="/login.jsp*" security="none"/>

<http use-expressions="false">
<intercept-url pattern="/**" access="ROLE_USER" />
<form-login login-page='/login.jsp'/>
</http>

從Spring Security 3.1開始,現在可以使用多個http元素為不同的請求模式定義單獨的安全過濾器鏈配置。 如果從http元素中省略了pattern屬性,則它匹配所有請求。 創建一個不安全的模式是此語法的一個簡單示例,其中該模式被映射到一個空的過濾器鏈[4]。 我們將在“安全過濾器鏈”一章中更詳細地介紹這種新語法。

重要的是要意識到,這些不安全的請求將完全忽略任何與Spring Security Web相關的配置或其他屬性(例如require-channel),因此您將無法在請求期間訪問當前用戶的信息或調用安全方法。 如果您仍然希望應用安全過濾器鏈,請使用access ='IS_AUTHENTICATED_ANONYMOUSLY'作為替代。

如果要使用基本身份驗證而不是表單登錄,則將配置更改為

<http use-expressions="false">
<intercept-url pattern="/**" access="ROLE_USER" />
<http-basic />
</http>

然后,基本身份驗證將具有優先權,並將在用戶嘗試訪問受保護資源時用於提示登錄。 如果您希望使用表單登錄,則在此配置中仍然可用,例如通過嵌入在另一個網頁中的登錄表單。

設置默認的登錄后目標

如果嘗試訪問受保護的資源未提示登錄表單,則將使用default-target-url選項。 這是用戶成功登錄后將轉到的URL,默認為“ /”。 您還可以通過將always-use-default-target屬性設置為“ true”,進行配置,以使用戶始終在該頁面上結束(無論登錄是“按需”還是明確選擇登錄)。 。 如果您的應用程序始終要求用戶從“主頁”頁面開始,這將很有用,例如:

<http pattern="/login.htm*" security="none"/>
<http use-expressions="false">
<intercept-url pattern='/**' access='ROLE_USER' />
<form-login login-page='/login.htm' default-target-url='/home.htm'
        always-use-default-target='true' />
</http>

要對目標進行更多控制,可以使用authentication-success-handler-ref屬性替代default-target-url 引用的bean應該是AuthenticationSuccessHandler的實例。 您可以在“核心過濾器”一章以及名稱空間附錄中找到有關此內容的更多信息,以及有關在身份驗證失敗時如何自定義流程的信息。

Spring Security參考文檔

暫無
暫無

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

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