2013-10-17 70 views
0

我正在使用Spring Security 3.1.x並已實施方法註釋證券。正如我所希望的那樣,當我在登錄時執行特定操作並且沒有權限時,我的控制檯中會有403個訪問被拒絕!完善!春季訪問拒絕處理程序可以引用彈出?

現在我想抓住這個403,並給用戶一個自定義消息彈出。我不想將用戶重定向到一個頁面,說他們沒有權利。

是否有任何方式春的訪問拒絕處理程序可以照顧彈出?或者它只能重定向到另一個頁面?也許還有其他選擇嗎?

提前致謝!

回答

1

開箱即用Spring Security只會發送403作爲錯誤。大多數容器將爲403狀態提供默認錯誤頁面並呈現HTML頁面。在這種情況下沒有重定向,它是前鋒。

聽起來好像您正在使用JavaScript,如果可以,您可以檢測HTTP狀態是否爲403,然後顯示您的自定義消息。如果你使用JQuery它會是這個樣子

$(document).ajaxError(function(event, jqxhr, settings, exception) { 
    if (jqxhr.status == 403) { 
     // output custom error 
    } else { 
     // ...other errors... 
    } 
    }); 

你可以做任何你在自定義AccessDeniedHandler想,只要它提供了完整的響應。實際上,您可以指定一個錯誤頁面轉發到另一個URL,以便您可以使用Spring MVC(或其他類型的控制器)處理URL。如果您使用的是XML名稱空間,則可以使用類似這樣的方法完成:

<http> 
    <!-- ... --> 

    <access-denied-handler error-page="/403" /> 
</http> 

然後,您可以隨意處理/ 403 URL。例如,如果你想設置的狀態,並提供一個錯誤信息,你可以創建一個Spring MVC控制器,它確實是這樣的:

@Controller 
public class ErrorsController { 

    @RequestMapping("/403") 
    public void forbidden(HttpServletRequest request, HttpServletResponse response) { 
     response.setStatus(HttpServletResponse.SC_FORBIDDEN); 
     response.getWritter().write("You do not have permission to perform this operation"); 
    } 
} 

你的JavaScript可以再搭上403,然後用響應的正文顯示消息。當然,如果你也想,也可以將響應格式化爲JSON。

+0

這正是我需要的。非常感謝。 accesDeniedHandler實現確實是一項非常棒的工作。我實際上讓accessDeniedHandler引發了403 HTTP狀態。 就像你說的,我用javascript抓住了它,並從那裏彈出一個更容易!非常感謝:D –

1

通常錯誤頁面是由應用服務器生成的。 在您的web.xml中,您可以爲不同的錯誤代碼定義自定義錯誤頁面。 然後,您的Web應用程序服務器將顯示自定義錯誤頁面,而不是原來的頁面。

粘貼這在web.xml文件

<error-page> 
<error-code>403</error-code> 
<location>/youraccessdeniedpage.jsp</location> 
</error-page> 

此外,添加攔截的URL標記你的春季安全性,使得任何人都可以看到錯誤頁面

<security:intercept-url pattern="/youraccessdeniedpage.jsp" access="permitAll"/> 

在自定義錯誤頁你可以顯示任何你想要的東西,包括彈出窗口等等。

+0

感謝您的幫助,雖然它仍然會將我重定向到另一個頁面(youraccessdeniedpage.jsp)。我通過拋出一個403 HTTP狀態並使用JavaScript來修復它:) –

1

要執行拒絕訪問的邏輯,您可以實現AccessDeniedHandler。這不完全是你想要的。它具有HttpServletResponse對象的句柄方法。所以你可以寫任何你想要的信息或重定向到另一頁。但主要的問題是你必須執行一個http請求並加載另一個頁面。這是Spring Security的工作方式。 但是,如果你真的想這樣做,你可以嘗試執行一個ajax請求,並檢查它是否返回403頁。

+0

是的,這非常好,非常感謝!我現在這樣做了!對不起,我無法爲所給出的答案投票正確答案!非常感謝幫助! :) –

+0

不用客氣 – mvb13

相關問題