1

再会。我已经使用 Tomcat 7.0 实现了带有 FORMS 身份验证的 JAAS 授权。当我尝试访问 localhost:8080/Guestbook/secure/123.html 时,我被重定向到授权页面。我进行身份验证,然后我被重定向到 localhost:8080/Guestbook/secure/css/style.css,得到 HTTP 状态 404 - /Guestbook/secure/css/style.css。如果我再次尝试访问 localhost:8080/Guestbook/secure/123.html 资源,我可以在不重定向到身份验证页面的情况下获取它。据我了解,我获得了授权,但我没有从第一次尝试就被重定向到资源。确实会发生什么以及可以采取哪些措施来防止这种行为?在我的 web.xml 中,我有以下代码。

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Security test</web-resource-name>
            <url-pattern>/secure/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>Admin</role-name>
        </auth-constraint>
    </security-constraint>

    <servlet-mapping>
        <servlet-name>FrontControllerServlet</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/login.jsp</form-login-page>
            <form-error-page>/error.html</form-error-page>
        </form-login-config>
    </login-config>
4

2 回答 2

1

我认为当您访问localhost:8080/Guestbook/secure/123.html浏览器时,正在从缓存中提供 html。并且 html 正在使用localhost:8080/Guestbook/secure/css/style.css,为此向服务器发出请求。而你这种行为。

我不明白保护静态页面的必要性。但是,如果您真的想安全地向浏览器发送缓存标头,这样浏览器就不会缓存 html 并始终向服务器发出请求。

要在浏览器中禁用缓存静态页面,请发送以下标头:

Pragma: no-cache
Cache-Control: no-cache,no-store
于 2012-06-02T16:22:01.377 回答
0

最后我找到了问题所在,我应该在链接标签的 href 属性中使用 ${pageContext.request.contextPath} 表达式。

于 2012-06-04T08:21:14.480 回答