[英]How to disable direct access to jsp pages?
我在java項目中有一個jsp頁面,我從下面的代碼中使用來自url的隱藏jsp擴展,但也在url中加載我的頁面和jsp擴展名。 怎么預防這個? 我的代碼:
<servlet>
<servlet-name>myTest</servlet-name>
<jsp-file>/testing.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>myTest</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
和url測試是:localhost / testing.jsp,我的測試頁面是訪問。
要快速解決方案,只需將您的JSP頁面放到WEB-INF
文件夾(然后它們將無法直接訪問)並按如下方式定義它們:
<servlet>
<description>
</description>
<display-name>hidden</display-name>
<servlet-name>hidden</servlet-name>
<jsp-file>/WEB-INF/hidden.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>hidden</servlet-name>
<url-pattern>/hidden</url-pattern>
</servlet-mapping>
但你應該考慮使用框架來完成它,比如Struts2或Spring。
您還可以使用過濾器並拒絕訪問jsps。
<filter>
<filter-name>JspFilter</filter-name>
<filter-class>my.JspFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>JspFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
Fitler:
public class JspFilter implements Filter{
public void doFilter(ServletRequest request, ServletReponse response,
FilterChain chain) {
HttpServletRequest req= (HttpServletRequest) request;
req.getRequestDispather("error.jsp).forward(request,response);
}
}
我會將url映射到servlet,然后從servlet返回jsp。 例如:
在web xml中:
<servlet>
<servlet-name>testServlet</servlet-name>
<servlet-class>com.yourpackage.testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
在servlet中:
request.getRequestDispatcher("testing.jsp").forward(request, response);
所以你的url模式將是/ test,但是將加載testing.jsp頁面。 希望這可以幫助。
您可以通過將以下內容添加到web.xml來防止直接訪問jsp文件,根據需要更改url模式。
<security-constraint>
<web-resource-collection>
<web-resource-name>JSP Files</web-resource-name>
<description>No direct access to JSP files</description>
<url-pattern>/pages/*</url-pattern>
<http-method>POST</http-method>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<description>No direct browser access to JSP files</description>
<role-name>NobodyHasThisRole</role-name>
</auth-constraint>
</security-constraint>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.