有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

jakarta ee如何在没有java认证的情况下停止直接访问网页(自定义标记)

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

在Myjsp文件夹中,我有所有的。jsp页面(\Tomcat 6.0\webapps\Myjsp)和类文件位于class/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 {
    }

}

网络。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> 

共 (1) 个答案

  1. # 1 楼答案

    我最近也有同样的问题。所以,我发现有两种方法可以做到这一点。第一种方法是使用应用服务器提供的工具,这些工具允许您对所有想要访问这些页面的用户进行身份验证。我只在JBOSS AS7上尝试了这个解决方案,效果很好,但我认为其他解决方案也允许您这样做,这里有一个链接,解释了如何一般地做到这一点,然后您只需要将它调整到您的应用程序服务器http://docs.oracle.com/javaee/6/tutorial/doc/gijrp.html

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

    <url-pattern>/*</url-pattern>
    

    为了解决这个问题,我建议您将页面组织到两个文件夹中,一个包含公共文件,另一个包含私人文件,然后您可以将其放入:

    <url-pattern>/private_pages/*</url-pattern>
    

    登录页面和所有其他页面将位于public_pages文件夹中。 此外,过滤器还没有执行任何操作,因此您需要获取http会话属性,并确定用户是否经过身份验证(然后允许他查看页面或将他重定向到登录页面)。 以下是我在调查与您相同的问题时发布的一些帖子的链接: -User authentication with J2EE -Authentication with Java EE -Session Tracking using J2EE

    希望对大家有用