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

时间:2014-04-19 13:27:30

标签: java jsf

如果我在路径中有一个页面,让我们说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,其中paginasadmin文件夹中的文件夹。如果用户退出浏览器,请再次打开它并键入其工作的相同URL,但仅限第一次。 tomcat变得疯狂还是类似的东西?

3 个答案:

答案 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 {
    }

}