![](/img/trans.png)
[英]How do I Design and Interface (OOP kind) in Java so that I can either use direct database access or use web services?
[英]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.