2013-05-21 58 views
1

目前我想重構我的項目並從url中刪除/faces/。原因很簡單,我想避免,用戶可以「刪除」面部分,並查看底層xhtml文件的來源。JSF Servlet模式/奇怪的請求

我使用Shiro進行身份驗證。我將首先描述先前的情況(有效的),現在是新的,這會造成麻煩。

前情況:

的web.xml:

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>/faces/*</url-pattern> 
</servlet-mapping> 

shiro.ini

[urls] 
/faces/index.xhtml = authc 
/faces/pages/** = authc 
/faces/templates/** = authc 
/faces/resources/** = authc 

現狀:

的web.xml:

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
</servlet-mapping> 

shiro.ini

[urls] 
/index.xhtml = authc 
/pages/** = authc 
/templates/** = authc 
/resources/** = authc 

對於可能仍然是 「面孔」 書籤的人,我添加了一個過濾器,而這樣做:

HttpServletRequest srequest = (HttpServletRequest) request; 
HttpServletResponse sresponse = (HttpServletResponse) response; 

String url = srequest.getRequestURI().trim(); 
System.out.println("Filtering url: " + url); 

if (url.contains("/faces/")){ 
     url = url.replace("/faces/", "/"); 

     System.out.println("Redirecting to: " + url); 
     sresponse.setStatus(HttpResponseCodes.SC_MOVED_PERMANENTLY); 
     sresponse.sendRedirect(url); 
    }else{ 
     //no filtering required, proceed with chain. 
     chain.doFilter(request, response); 
    } 

現在,當我清除了瀏覽器的緩存,並呼籲http://localhost/project/login.xhtml我收到了大量的嘗試在各種資源文件夾中查找xhtml文件:

12:27:46,735 INFO [stdout](http - 0.0.0.0-8090-6)過濾網址:/project/resources/css/login.xhtml

12:27:46,737 INFO [stdout](http --0.0.0.0-8090-6)過濾網址:/project/resources/css/login.xhtml

12:27:46,836 INFO [stdout](http - 0.0.0.0-8090-6)過濾網址:/project/resources/js/login.xhtml

12:27:46,837 INFO [stdout](http - 0.0.0.0-8090-1)過濾網址:/project/resources/js/login.xhtml

...

這顯然是錯誤的。切換回之前的佈局,但保留重定向過濾器而不是會導致任何無效的請求。

回答

3

這是因爲對JSF資源(CSS/JS /圖像文件)的請求也是被Shiro封鎖並重定向到login.xhtml。你沒有注意到你的登錄頁面上的所有CSS/JS /圖像已經消失了嗎?

您需要將/javax.faces.resource/*請求映射到shiro.ini最頂端的anon用戶。

/javax.faces.resource/** = anon 
+0

是的,我想通了:) – dognose

0

我找到了解決辦法:

在Shiro.ini我也改變authc.loginUrl = /faces/login.xhtmlauthc.loginUrl = login.xhtml

結合規則/resources/** = authc這現在導致試圖訪問資源,並重定向到在資源文件夾內的login.xhtml無限循環。

1.)我現在將loginUrl更改爲authc.loginUrl = /login.xhtml

2。)我注意到,以這種方式獲取資源不再使人感興趣,因爲我想訪問樣式表和其他東西,而無需登錄。 (它與以前的版本一起工作,因爲資源尚未使用/faces/路徑訪問,因此shiro並未保護它們。)

+1

等等,你是這樣使用'

  • 11. jsf selectOneMenu奇怪的itemValue
  • 12. 奇怪的JSF問題
  • 13. JSF請求範圍形式
  • 14. Qt GET請求奇怪的響應
  • 15. 來自http.get請求的奇怪輸出?
  • 16. 請求屬性/ ICEfaces的行爲奇怪
  • 17. 奇怪的錯誤請求錯誤
  • 18. HTTP請求中的奇怪字符
  • 19. 奇怪的Apache請求延遲
  • 20. GET請求中的奇怪代碼PHP
  • 21. Heroku上的奇怪請求超時
  • 22. 奇怪請求的Java遞歸
  • 23. ajax請求標題奇怪的行爲
  • 24. HTTP請求,奇怪的插座行爲
  • 25. ASP NET MVC請求奇怪的行爲
  • 26. 奇怪的構造模式
  • 27. 奇怪的遺傳模式
  • 28. 奇怪的XML模式
  • 29. Python的請求模塊結束了奇怪的重定向
  • 30. 奇怪的pjax行爲:GET請求在pjax請求後啓動