我使用的是带有tomcat 7.0的Eclipse IDE。
我有一个web应用程序,现在在web应用程序中我有:
MainPage.html
Servlet1
(java类)- 一些jsp文件。(其中一些仅供管理员使用,例如
driving_page.jsp
)
在主页面中,我在一个重定向到servlet的表单中有4个按钮。当我点击一个按钮时,它会转到servlet,servlet重定向到driving_page.jsp
,但首先它需要显示login.jsp
页面,但它没有。。
在chrome中,我将driving_page URL输入为localhost:8080/TaxiWeb/driving_page.jsp
在显示页面之前,它会按需要向我显示'login.jsp
页面。
但如果我点击上面提到的MainPage.html
中的按钮,它会跳过login.jsp
页面,直接转到driving_page.jsp
页面。为什么?
注意:driving_page.jsp
文件位于FOLDER:AdminPages内。。因此CCD_ 13文件中的CCD_。
tomcat-users.xml:
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
</tomcat-users>
my web.xml file:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<security-constraint>
<web-resource-collection>
<web-resource-name>Driving page</web-resource-name>
<url-pattern>/AdminPages/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>role1</role-name>
</auth-constraint>
</security-constraint>
<security-role><role-name>role1</role-name></security-role>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/login_error.jsp</form-error-page>
</form-login-config>
</login-config>
!-- ********************************************************************** -->
<servlet>
<servlet-name>Servlet1</servlet-name>
<servlet-class>pack.servlets.servlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet1</servlet-name>
<url-pattern>/Servlet1</url-pattern>
</servlet-mapping>
以及servlet代码:注意:我只是在servlet中添加了上面提到的按钮代码:
else if (request.getParameter("submit").equals("Show Taxis at Driving"))
{
request.getRequestDispatcher("AdminPages/driving_page.jsp").forward(request,response);
}
您的问题属于servlet规范13.2(声明安全性)
安全模型适用于web的静态内容部分应用程序中的servlet和筛选器由客户端请求。当servlet使用RequestDispatcher来调用静态资源或servlet使用forward或include。
基本上,您的安全约束只会被初始请求获取,而被servlet转发忽略。
解决方法是将所有安全JSP移到WEB-INF文件夹下,这样就不能直接访问它们。更新到那里的前进路径。然后指出您的安全约束以覆盖servlet而不是JSP。
这里,您需要使用response.sendRedirect(String location)
。此方法将响应连同状态代码和新页面位置一起发送回浏览器。现在,浏览器再次发送一个重定向"位置"的新请求
在这里,你需要在该URL上有一个Filter
,在该过滤器中,你需要检查用户是否被允许查看该页面。