如果我在路径中有一个页面,让我们说http://localhost:8080/MyApp/admin/login.xhtml
,当用户键入http://localhost:8080/MyApp/admin/
时,如何将此login.xhtml设置为此文件夹的默认页面?
我不希望这个页面在欢迎文件列表中,我希望它只是该文件夹的默认页面。
-----编辑-----
正如@ joe776建议的那样,我试图将index.jsp放在我的admin
文件夹中,其上有一个<jsp:forward page="login.xhtml" />
,它可以工作,但只是第一次!如果用户再次输入http://localhost:8080/MyApp/admin/
,则会显示错误/admin/paginas/index.xhtml Not Found in ExternalContext as a Resource
,其中paginas
是admin
文件夹中的文件夹。如果用户退出浏览器,请再次打开它并键入其工作的相同URL,但仅限第一次。 tomcat变得疯狂还是类似的东西?
答案 0 :(得分:0)
一种简单的方法是将index.jsp
放入该文件夹,然后将其重定向到您的login.xhtml
。另一种方法是将login.xhtml
添加为欢迎页面。
Tomcat文档提供了两种可能性的示例:http://wiki.apache.org/tomcat/HowTo#How_do_I_override_the_default_home_page_loaded_by_Tomcat.3F
答案 1 :(得分:0)
您可以向web.xml添加安全性约束。样本如下
<security-constraint>
<display-name>Admin</display-name>
<web-resource-collection>
<web-resource-name>Protected</web-resource-name>
<description>Protected Page</description>
<url-pattern>/admin/ *</url-pattern>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name/>
</auth-constraint>
</security-constraint>
因此,每当您尝试访问admin文件夹中的任何内容时,它都会引导您进入登录页面。
只需重定向到/admin/login.xhtml即可使用过滤器。以下是jsf过滤器的doFilter方法的示例代码,您可以根据自己的需要进行修改。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
RequestDispatcher rd;
HttpServletRequest req = (HttpServletRequest) request;
String requestURI = req.getRequestURI();
if (requestURI.equalsIgnoreCase("/index.xhtml")) {
rd = req.getRequestDispatcher("/admin/login.xhtml?faces-redirect=true");
rd.forward(request, response);
}else{
chain.doFilter(request, response);
}
}
答案 2 :(得分:0)
正如@jpr所说,我使用过滤器重定向到登录页面,唯一奇怪的是我需要获取网址并在用户进入“/ admin”文件夹时再次向前移动,因为它是重定向的到了错误的页面,不知道为什么。 但我的代码现在看起来像这样:
@WebFilter({ “/管理/ paginas / *”})
public class LoginFilter implements Serializable, Filter{
private static final long serialVersionUID = 1L;
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
// HttpServletResponse res = (HttpServletResponse) response;
HttpSession httpSession=req.getSession(true);
Object administradorLogado=httpSession.getAttribute("administrador");
System.out.println("Entrando no loginFileter!");
if (administradorLogado == null) {
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/admin/login.xhtml?faces-redirect=true");
requestDispatcher.forward(request, response);
}else{
String url = ((HttpServletRequest)request).getRequestURL().toString();
System.out.println("URL que peguei no filter admin: "+url);
if(url.endsWith("admin/")){
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/admin/login.xhtml?faces-redirect=true");
requestDispatcher.forward(request, response);
}else{
chain.doFilter(request, response);
}
}
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}