`

使用Servlet过滤器实现用户登录验证

阅读更多
在一个系统中,往往第一步就是让用户登录,根据用户读出权限,然后列出菜单供用户操作。用户登录后一般将其信息存储到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文件中的配置顺序将其设置称过滤器链挨个处理,处理到最后一个跳转到处理页面进行处理。后面会再配置一个控制权限的过滤器。
分享到:
评论

相关推荐

    servlet过滤器验证用户登录

    用过滤器来验证用户是否登录

    servlet 过滤器做的简单登陆demo

    servlet 过滤器做的简单登陆demo 初学者的简单例子。

    jsp+servlet登录验证过滤器

    jsp+servlet登录验证过滤器jsp+servlet登录验证过滤器jsp+servlet登录验证过滤器

    Servlet过滤器使用

    1、Filter接口:所有的Servlet过滤器类都必须实现javax.servlet.Filter接口 a、init(FilterConfig): 这是Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。在这个方法中可以读取...

    jsp servlet过滤器,登陆验证 获取session

    一个超帅的jsp过滤器 ,对登录进行验证

    利用JSP+Servlet实现简单的个人博客网站,主要功能包括用户注册(注册验证)

    1、利用JSP+Servlet实现简单的个人博客网站,主要功能包括用户注册(注册验证)、用户登录、发文、删除发文和查看发文。...(3)设计用户登录验证过滤器,当用户访问发文页面时,要求用户先进行登录,跳转到登录页面。

    ibatis + filter

    iBatis示例教程,使用Servlet过滤器实现用户登录验证

    servlet+jsp实现过滤器 防止用户未登录访问

    我们可能经常会用到这一功能,比如有时,...另一种则是利用过滤器,访问页面时都进行过滤验证,如果存在该用户session,则访问该页面,否则跳转到登陆页面登录,保存session后访问其它页面。 以下是我的实现 package c

    JSP使用Servlet过滤器进行身份验证的方法

    主要介绍了JSP使用Servlet过滤器进行身份验证的方法,结合实例形式分析了Servlet过滤器的实现方法及jsp身份验证的具体使用技巧,需要的朋友可以参考下

    Servlet之过滤器

    很有用的几个过滤器编程的例子,验证非法文字、验证登录和统一编码

    jsp+servlet实现增删改查

    jsp+servlet实现CRUD功能,ajax验证用户名,退出系统,数据库密码加密,过滤器解决中文乱码,实现分页功能,实现导出Excel等等功能。页面不是很美观、、、、

    jsp实现登录验证的过滤器

    本文实例为大家分享了jsp实现登录验证的过滤器,供大家参考,具体内容如下 1.新建一个Dynamic Web Project项目,里面新建1个filter文件、1个servlet文件和2个jsp文件,整体的框架如图所示: 2.LoginFilter.java里面...

    JavaWeb实现网上商城:JSP+Servlet+Dao

    MVC:Model View Controller ...Servlet过滤器(filter):能够在一个Request到达servlet之前预处理request,也可以在离开servlet时处理response Servlet监听器:给web中的各种操作绑定事件,并对事件进行处理

    java过滤器讲义

    过滤器是Servlet规范中的一个web组件,截取用户端的请求与响应信息,并对这些信息过滤 由容器负责管理其生命周期,过滤器用来对请求和应答进行过滤处理,如果权限验证、内容类型验证等等。 如:网站要求先登录后访问...

    java用户信息管理系统

    Servlet + JSP + MySQL + JDBCTempleat + Duird + BeanUtils+ tomcat实现用户信息的增删改查操作,过滤器登录验证,敏感词汇和谐等功能,打造用户信息管理系统

    Java 基于jsp+js+servlet+jdbc+mysql原生界面开发后台管理系统源码(分页,登录、注册、图片上传)等功能

    基于jsp+js+servlet+jdbc+mysql开发产品后台管理系统,实现用户增删改查、分页,登录,注册,图片上传等功能。 包括以下5个功能: 1、登录 用户默认主页index.jsp,可选择【登录】功能,若登录成功,则进入产品管理中...

    Servlet编程:过滤器实验 文件代码

    按课程讲解创建过滤器,并完成相关配置,使页面1和页面2都使用过滤器,假设页面1为登录页面,页面2为业务页面,在过滤器中验证有效登录信息,如果没有登录则可以提示并跳转到登录页面。

    J2EE应用开发_servlet

    Servlet介绍 Servlet常用的接口 Servlet的配置 Servlet过滤器 Servlet容器安全和身份验证 Servlet图像处理 Servlet应用实例——投票模块

    基于servlet 和 jsp 编写新闻管理系统+数据库.zip

    该系统基于 Servlet 和 Jsp 编写,拥有完整的新闻管理系统的功能,包括了三个模块:后台管理模块、PC 端用户模块、手机端用户模块,并且基于过滤器编写了登录验证功能。 后台管理 后台管理系统中,包括了以下功能:...

Global site tag (gtag.js) - Google Analytics