包含一些返回401的页面

时间:2011-02-06 11:50:49

标签: java jsp servlets http-status-code-401 jspinclude

我在某个服务器上部署了一些网页说:

http://myhost/some_secured_file.html

当我在浏览器中访问此文件时,它返回401,要求我自己授权。

问题是我试图使用c:import标记将此页面包含在某个JSP页面中。

app服务器返回:

javax.servlet.jsp.JspException: Problem accessing the absolute URL "http://myhost/some_secured_file.html". java
    .io.IOException: Server returned HTTP response code: 401 for URL: http://myhost/some_secured_file.html

我如何完成包含!?

1 个答案:

答案 0 :(得分:3)

考虑通过另一个jsp页面或servlet代理请求。然后,让代理执行身份验证请求,例如,使用Apache HTTPClient,并将该响应的内容写入页面。然后,您只需在jsp页面上导入代理的URL即可。

好的,请考虑以下伪代码作为说明:

class Proxy extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws   ServletException, IOException {
        // Perform a new request to get contents from secured page
        HttpClient client = new HttpClient();
        Credentials credentials = new UsernamePasswordCredentials("user", "pass");
        client.getState().setCredentials(authScope, credentials);
        GetMethod method = new GetMethod("/secure_page.jsp");
        client.executeMethod(client.getHostConfiguration();, method);

        // write result to the outputstream
        resp.getWriter().write( method.getResponseBodyAsString() );
    }
}

这个servlet的作用是为您获取安全页面。您需要在Web描述符中挂起此servlet。这对于例如/proxy.jsp请求映射是必要的。您在jsp页面中可以执行的操作类似于<c:import value="proxy.jsp"/>