我在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,我的测试页面是访问。
答案 0 :(得分:5)
要获得快速解决方案,只需将您的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。
答案 1 :(得分:3)
您还可以使用过滤器并拒绝访问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);
}
}
答案 2 :(得分:0)
我会将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页面。希望这会有所帮助。
答案 3 :(得分:-1)
您可以通过在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>