我正在使用带有tomcat 7.0的Eclipse IDE。
我有一个Web应用程序,现在在我的Web应用程序中:
MainPage.html
Servlet1
(java class)driving_page.jsp
)在主页面中,表单内有4个按钮,可以重定向到servlet。
当我点击一个按钮,它进入servlet,servlet重定向到driving_page.jsp
,但首先它需要显示login.jsp
页面,但它没有...
在Chrome中,我输入了drive_page网址为localhost:8080/TaxiWeb/driving_page.jsp
在显示页面之前,它会显示“login.jsp
页面,因为它需要。”
但是,如果我点击上面提到的MainPage.html
中的按钮,它会跳过login.jsp
页面并直接转到driving_page.jsp
页面。
为什么?
注意: driving_page.jsp
文件位于文件夹:AdminPages ..
所以url-pattern
文件中的web.xml
是正确的。
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);
}
答案 0 :(得分:2)
您的问题属于servlet spec 13.2(声明性安全性)
安全模型适用于Web的静态内容部分 应用程序以及应用程序中的servlet和过滤器 客户要求。安全模型不适用于 servlet使用RequestDispatcher来调用静态资源或 使用转发或包含的servlet。
基本上,您的安全约束只会被初始请求获取,并被您的servlet转发忽略。
解决此问题的方法是将所有安全JSP移到WEB-INF文件夹下,以便无法直接访问它们。更新您的前进路径。然后将安全性约束指向覆盖servlet而不是JSP。
答案 1 :(得分:0)
在这里,您需要使用response.sendRedirect(String location)
。此方法将响应以及状态代码和新页面位置发送回浏览器。现在,浏览器再次发送重定向“位置”的新请求
在这里,您需要在该URL上有Filter
,并且在该过滤器中,您需要检查是否允许用户查看此页面。