繁体   English   中英

如何在不使用Java身份验证的情况下停止直接访问网页(自定义标签)

[英]how can i stop direct access to web pages without authentication in java (Custom Tag)

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

在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> 

我最近也遇到过同样的问题。 因此,我发现有两种方法可以执行此操作。 第一个是使用应用程序服务器提供的工具,这些工具使您可以对要访问这些页面的所有用户进行身份验证。 我只在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会话属性,并确定用户是否已通过身份验证(然后允许他查看该页面或将其重定向到登录页面)。 以下是我和您进行调查时一些帖子的链接:- 使用J2EE进行用户身份验证 - 使用Java EE进行身份验证 - 使用J2EE进行会话跟踪

希望有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM