美好的一天。春季開機+春季安全:如何取消基本身份驗證表格
我在Spring引導自動配置的應用程序中使用了Spring安全性。我的目標是設置基本身份驗證,以便標準瀏覽器的基本身份驗證表單在401上不顯示。從Google發現要實現它,我需要將默認的「WWW-Authenticate」標題更改爲不同於「基本xxxxx「。
爲了做到這一點,我宣佈一個過濾器:
@Bean
@Order(Integer.MAX_VALUE)
public Filter customAuthFilter() {
return new Filter() {
@Override
public void init(FilterConfig fc) throws ServletException {
}
@Override
public void doFilter(ServletRequest sreq, ServletResponse sresp, FilterChain fc) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) sreq;
HttpServletResponse resp = (HttpServletResponse) sresp;
fc.doFilter(req, resp);
log.info("filter");
log.info("status " + resp.getStatus());
if(resp.getStatus() == 401) {
resp.setHeader("WWW-Authenticate", "Client-driven");
}
}
@Override
public void destroy() {
}
};
從我看到我的過濾器成功應用的認可,並採取了處理響應(我看到的doFilter日誌消息)參與的日誌。但瀏覽器收到的實際響應仍包含標準的「WWW-Authenticate」標頭。看起來有人超越了我的標題,因爲我沒有確切的線索。
請問有人能給個建議嗎?
謝謝你的答覆。我已經嘗試了你提到的傳統方式 - 確實很有用,但它不是我正在尋找的。看起來AuthenticationFailureHandler只是在錯誤的身份驗證嘗試(用戶在登錄表單中提交的無效憑證)時觸發的。但是我正在尋找的是在答覆HTTP客戶端之前透明地自定義某些響應頭的方法。在原始servlet環境中,我可以通過過濾器來實現,但在Spring中,這種方法似乎工作方式不同...... – skapral 2014-10-07 13:09:28
過濾器是過濾器。我預見到的唯一問題是,您可能需要屏蔽響應,以防止它在您的過濾器有機會完成任務之前提交。但是你說你已經有了這個工作,所以你應該做的就是按照正確的順序進行。這很簡單(只需更改訂單)。 – 2014-10-07 14:28:21