繁体   English   中英

如何禁用直接访问jsp页面?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM