在java(自定义标记)中,如何在没有身份验证的情况下停止直接访问网页

在java(自定义标记)中,如何在没有身份验证的情况下停止直接访问网页,java,jakarta-ee,Java,Jakarta Ee,我正在使用MVC(自定义标记),我想知道如何限制对应用程序页面的直接访问,除非经过身份验证。我尝试使用过滤器,但遇到了一个问题,它会阻止对登录页面本身的访问。我希望每个用户都能访问登录页面,并且只有在经过身份验证后才能访问其他页面。请告诉我需要在代码中做哪些更改 在Myjsp文件夹中,我有所有的.jsp页面(\Tomcat 6.0\webapps\Myjsp),类文件在classes/pack/java中 以下是过滤器: package pack.java; import java.io.*;

我正在使用MVC(自定义标记),我想知道如何限制对应用程序页面的直接访问,除非经过身份验证。我尝试使用过滤器,但遇到了一个问题,它会阻止对登录页面本身的访问。我希望每个用户都能访问登录页面,并且只有在经过身份验证后才能访问其他页面。请告诉我需要在代码中做哪些更改

在Myjsp文件夹中,我有所有的.jsp页面(\Tomcat 6.0\webapps\Myjsp),类文件在classes/pack/java中

以下是过滤器:

package pack.java;

import java.io.*;
import javax.servlet.*;

public class loginfilter implements Filter {
    String aa;

    public void destroy() {
    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        aa = request.getRequestURI();
        chain.doFilter(request, response);
    }

    public void init(FilterConfig fconfig) throws ServletException {
    }

}
Web.xml条目:

<filter>
    <filter-name>loginfilter</filter-name>
    <filter-class>pack.java</filter-class>
</filter>

<filter-mapping>
    <filter-name>loginfilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping> 

逻辑过滤器
pack.java
逻辑过滤器
/*

我最近也遇到了同样的问题。所以,我发现有两种方法可以做到这一点。第一种方法是使用应用程序服务器提供的工具,这些工具允许您对希望访问这些页面的所有用户进行身份验证。我只在JBOSS AS7上尝试过这个解决方案,它工作得很好,但我认为其他解决方案也允许您这样做,这里有一个链接解释了一般如何做,然后您只需要将它调整到您的应用服务器上

但是,有时你需要对身份验证有更多的控制,而不是依赖于这种类型的身份验证(在我的例子中,我还允许通过facebook或gmail帐户对客户端进行身份验证),因此解决方案是使用一个过滤器,只过滤对私人页面的调用(需要身份验证)。从我看到的情况来看,您的loggin筛选器当前正在筛选您的所有页面(包括登录页面),因为您有:

<url-pattern>/*</url-pattern>
/*
要解决此问题,我建议您将页面组织到两个文件夹中,一个包含公共文件,另一个包含私人文件,然后您可以将其放入:

<url-pattern>/private_pages/*</url-pattern>
/private\u页面/*
登录页面和所有其他页面都将位于public_pages文件夹中。 此外,过滤器还没有执行任何操作,因此您需要获取http会话属性,并确定用户是否经过身份验证(然后允许他查看页面或将他重定向到登录页面)。 以下是我和你调查时的一些帖子的链接: - - -

希望对大家有用