在一个系统中,往往第一步就是让用户登录,根据用户读出权限,然后列出菜单供用户操作。用户登录后一般将其信息存储到session中,在其他的页面从session中读取用户信息,如果不存在,则表明用户并未登录,就跳转到登录页面要求用户登录。
如果不使用过滤器的话当然也可以实现,那就要在每一个页面添加验证信息,这样就很复杂,而且不利于管理。我们的宗旨是,只要是能够统一处理的,就一定要将这个功能作为公共模块提取出来。不多说,看代码。
package Filters;import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class LogOrNot implements javax.servlet.Filter {
private FilterConfig config;
private String logon_page;
private String home_page;
public void destroy() {
config = null;
}
public void init(FilterConfig filterconfig) throws ServletException {
// 从部署描述符中获取登录页面和首页的URI
config = filterconfig;
logon_page = filterconfig.getInitParameter("LOGON_URI");
home_page = filterconfig.getInitParameter("HOME_URI");
System.out.println(home_page);
if (null == logon_page || null == home_page) {
throw new ServletException("没有找到登录页面或主页");
}
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse rpo = (HttpServletResponse) response;
javax.servlet.http.HttpSession session = req.getSession();
try {
req.setCharacterEncoding("utf-8");
} catch (Exception e1) {
e1.printStackTrace();
}
String userId = (String) session.getAttribute("UserId");
String request_uri = req.getRequestURI().toUpperCase();// 得到用户请求的URI
String ctxPath = req.getContextPath();// 得到web应用程序的上下文路径
String uri = request_uri.substring(ctxPath.length()); // 去除上下文路径,得到剩余部分的路径
try {
if (request_uri.indexOf("LOGIN.JSP") == -1 && request_uri.indexOf("LOG.JSP") == -1 && userId == null)
{
rpo.sendRedirect(home_page+logon_page);
System.out.print(home_page+logon_page);
return;
}
else {
chain.doFilter(request, response);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Code Author:Jacy.
这里对上面的代码稍作解释:过滤器从配置文件中读出配置选项,一个是登陆页面的url地址,另外一个是web应用的url,之所以要这样做,是因为如果程序中有iframe的话,登陆页面会默认在iframe中打开,因此这里将使用绝对地址进行跳转;判断语句中要将login.jsp和log.jsp排除,因为这两个是处理登陆的页面,若不排除将出现循环重定向;检查session中的userid选项,当然也可以设置其他的,关键看session中存的是什么了,若有,则递交给下一个过滤器,若不再有过滤器,则提交给处理页面,若未登陆,则跳转到登陆页面。
代码写好后,就需要在web应用的web.xml文件中进行配置。filter其实就是一种Servlet,因此配置方法和Servlet是一样的。代码如下:
XML语言: 临时自用代码@代码发芽网<filter>
<filter-name>LogOrNot</filter-name>
<filter-class>Filters.LogOrNot</filter-class>
<init-param>
<param-name>LOGON_URI</param-name>
<param-value>log.jsp</param-value>
</init-param>
<init-param>
<param-name>HOME_URI</param-name>
<param-value>/model/</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LogOrNot</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>Code Author:Jacy.
其中两个配置参数就对应了Java文件中使用的参数log.jsp是登陆的视图页面,/model/是当前web应用的文件夹名称。mapping里面定义了对*.jsp进行过滤,如果程序中还有其他的页面,如.do或者.action等,那么可以继续添加<filter-mapping>这个选项,其中<url-pattern>就填写*.do或者*.action即可。
这样对所有的页面都可以进行过滤。当然还可以为应用配置其他的过滤器,Tomcat容器会根据web.xml文件中的配置顺序将其设置称过滤器链挨个处理,处理到最后一个跳转到处理页面进行处理。后面会再配置一个控制权限的过滤器。
分享到:
相关推荐
### 实现用户登录验证的过滤器 在给定的代码示例中,我们看到了一个名为`RightFilter`的过滤器实现,其主要逻辑如下: 1. **初始化**:`RightFilter`实现了`Filter`接口,因此必须实现`init()`方法,但在这个例子...
通过这个简单的登录demo,初学者可以学习到如何使用Servlet过滤器进行权限控制,以及session和cookie在用户管理中的应用。这有助于理解Web应用程序中的身份验证和会话管理机制,为更复杂的Web应用开发打下基础。
在标题"Servlet过滤器的简单使用源码+文档"中,我们可以理解为这个压缩包包含了一个关于Servlet过滤器的基础应用示例,以及相关的源代码和文档资料。描述中提到的"实现一个登陆界面",表明了过滤器可能被用作验证...
综上所述,使用servlet+jsp实现过滤器,可以有效地防止未登录用户访问受保护页面。开发者可以灵活地定义过滤器的行为,并且通过配置文件将过滤器与具体的URL模式关联起来,实现复杂的权限控制逻辑。
在这个项目中,“jsp+servlet登录验证过滤器”涉及了用户登录验证的过程,以及使用过滤器(Filter)来实现这一功能。下面将详细介绍这个主题中的相关知识点。 1. **JSP**:JSP是一种服务器端的技术,允许开发者在...
在这个场景下,我们讨论的是如何使用过滤器来实现用户登录验证的功能。下面将详细解释这一过程。 首先,我们需要了解过滤器的基本概念。在Java Web应用中,过滤器是实现了javax.servlet.Filter接口的类。它们通过在...
过滤器验证用户是否已经登录 在基于 JSP 页面系统设计开发中,经常有一批页面需要对用户的身份进行验证,只有合法的用户才可以访问这些页面。为了解决 JSP 页面用户身份验证的问题,可以使用 Servlet 过滤器对 JSP ...
在本实例中,我们将深入探讨Servlet过滤器(Filter)的使用和实现,以及它在实际应用中的重要性。 一、Servlet过滤器简介 Servlet过滤器遵循Java Servlet规范,通过实现`javax.servlet.Filter`接口来创建自定义过滤...
总结起来,这个例子展示了如何使用`Servlet`过滤器进行登录验证,以及如何利用`session`来跟踪用户状态。`session`对象允许我们在多个请求之间持久化用户数据,这对于实现登录功能至关重要。同时,过滤器提供了一种...
在本主题中,我们将重点讨论如何使用过滤器来实现用户登录验证。这在保护网站资源、确保只有已登录的用户才能访问特定页面时尤其重要。 过滤器的工作原理是基于Servlet规范中的Filter接口。当一个HTTP请求到达...
本实例的目标是设计并实现一个简单的Servlet过滤器,用于检查用户的登录状态。具体来说,当用户通过正常的登录流程进入系统后,服务器会在用户的会话(Session)中存储一个表示已登录用户的对象(命名为"user")。...
1、Filter接口:所有的Servlet过滤器类都必须实现javax.servlet.Filter接口 a、init(FilterConfig): 这是Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。在这个方法中可以读取...
#### 二、解决方案:使用Servlet过滤器 Servlet过滤器是一种可以拦截请求和响应的组件,它可以在请求到达目标资源之前或响应返回客户端之前进行预处理。通过配置过滤器来统一处理字符编码问题,可以有效避免乱码的...
通过JokerDemo这样的示例项目,你可以更深入地了解Servlet过滤器的使用和原理。在实践中,你可以尝试创建一个简单的过滤器,观察其在请求处理流程中的行为,逐步掌握这个强大的工具。 总的来说,Servlet过滤器是...
通过Servlet过滤器,我们可以实现基于URL的权限验证,只有具备相应权限的用户才能访问特定的资源。 字符过滤是另一个关键的安全措施,主要针对用户输入的合法性检查。它可以防止SQL注入、XSS攻击等安全风险,确保...
在本例中,我们将探讨如何使用过滤器来实现用户登录验证,防止未登录用户直接访问受保护的页面。 首先,我们需要创建一个实现了`javax.servlet.Filter`接口的类。这个接口定义了三个方法:`init()`, `doFilter()` ...
### Servlet过滤器详解 #### 一、Filter的基本概念与作用 **过滤器(Filter)**是一种Web组件,它能够在客户端请求到达目标资源(如Servlet、JSP页面等)之前进行预处理,以及在响应返回客户端之前进行后处理。...
本篇文章将深入探讨在Tomcat容器中如何使用servlet过滤器,并通过实例进行讲解。 首先,了解过滤器的基本概念。Servlet过滤器遵循Servlet规范中的Filter接口,该接口定义了三个关键方法:`doFilter()`, `init()` 和...
### Servlet过滤器机制分析及应用 #### 一、概述 Servlet过滤器是Java Web应用程序中的一个重要组成部分,它...此外,由于Servlet过滤器是基于纯Java实现的,因此它们可以在任何兼容J2EE环境的平台上轻松部署和使用。