美好的一天。我使用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>
答案 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}表达式。