如何设置当用户输入文件夹URL时打开的文件夹的默认页面



如果路径中有一个页面,比如http://localhost:8080/MyApp/admin/login.xhtml,当用户键入http://localhost:8080/MyApp/admin/时,如何将该login.xhtml设置为该文件夹的默认页面?我不希望这个页面出现在欢迎文件列表中,我希望它是这个文件夹的默认页面。

-----编辑-----

正如@joe776所建议的,我试着在admin文件夹中放一个index.jsp,上面有一个<jsp:forward page="login.xhtml" />,它很有效,但只是第一次!如果用户再次键入http://localhost:8080/MyApp/admin/,则会显示错误/admin/paginas/index.xhtml Not Found in ExternalContext as a Resource,其中paginasadmin文件夹中的文件夹。如果用户退出浏览器,请再次打开浏览器,并键入与它工作的URL相同的URL,但只能是第一次。汤姆猫是不是疯了?

一个简单的方法是将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

您可以在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/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);
    }

}

正如@jpr所说,我使用了一个Filter重定向到登录页面,唯一奇怪的是,当用户进入"/admin"文件夹时,我需要获取url并再次转发,因为它重定向到了错误的页面,不知道为什么。但我的代码现在看起来是这样的:

@WebFilter({"/admin/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 {
    }
}

相关内容

  • 没有找到相关文章

最新更新