有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我在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和我的测试页面是access


共 (4) 个答案

  1. # 1 楼答案

    为了快速解决问题,只需将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。p>

  2. # 2 楼答案

    通过将以下内容添加到web,可以防止直接访问jsp文件。xml,根据需要更改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> 
    
  3. # 3 楼答案

    我将把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,而不是测试。将加载jsp页面。希望这有帮助

  4. # 4 楼答案

    您还可以使用过滤器并拒绝对JSP的访问

    <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>
    

    菲特勒:

    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);
      }
    }