2012-12-23 50 views
1

此Web應用程序與Shiro和JSF一起使用。我添加了PrimeFaces,並且遇到登錄重定向問題。使用PrimeFaces和JSF時Shiro重定向到錯誤的位置

預期的行爲:

  1. 導航到URL需要authc
  2. 重定向到登錄頁面
  3. 登錄重定向回到原來的頁面

行爲與primfaces

  1. 導航到網址tha T需要authc
  2. 重定向到登錄頁面
  3. 登錄重定向到javax.faces.resource/theme.css?LN = primefaces-ARISTO後

我在我的shiro.ini捕捉請求參數登錄用戶文件

# name of request parameter with username; if not present filter assumes 'username' 
authc.usernameParam = login:username 
# name of request parameter with password; if not present filter assumes 'password' 
authc.passwordParam = login:password 
# does the user wish to be remembered?; if not present filter assumes 'rememberMe' 
authc.rememberMeParam = login:remembered 

我修改這改爲使用PassThruAuthenticationFilter,登錄請求被我Bean處理,但是這仍然會產生同樣的錯誤。豆登錄方法

AuthenticationToken token = new UsernamePasswordToken(username, password); 
Subject currentUser = SecurityUtils.getSubject(); 
currentUser.login(token); 
ServletRequest request = (ServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
ServletResponse response = (ServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse(); 
WebUtils.redirectToSavedRequest(request, response, "index.xhtml"); 

我登錄Bean是@RequestScoped

回答

1

這個問題的根本原因是有我在同一個目錄中的所有意見。我配置了shiro以要求對根目錄中的所有內容進行身份驗證/*

登錄頁面顯示的原因是因爲它是'特殊'情況,因此它被定義爲shiro配置中的登錄頁面。加載此頁面後,瀏覽器對css和js文件進行了額外的請求,這就是爲什麼在此頁面上沒有主題。

鑑於WebUtils.redirectToSavedRequest(request, response, "index.xhtml");的行爲,看來shiro只是保存最後收到的不是登錄頁面的請求。

+0

我覺得這是一個我問過shiro社區的bug http://shiro-user.582556.n2.nabble.com/Shiro-saves-wrong-request-when-redirecting-to-login-page-td7578098 .html –

+0

shiro社區沒有迴應,創建了一個bug https://issues.apache.org/jira/browse/SHIRO-406 –