目前我想重構我的項目並從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
...
這顯然是錯誤的。切換回之前的佈局,但保留重定向過濾器而不是會導致任何無效的請求。
是的,我想通了:) – dognose