JAAS身份验证和Servlet响应

时间:2012-06-02 10:50:13

标签: java-ee servlets jaas

美好的一天。我使用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>

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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