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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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语言: 临时自用代码@代码发芽网

LogOrNot

Filters.LogOrNot

LOGON_URI

log.jsp

HOME_URI

/model/

LogOrNot

*.jsp

Code Author:Jacy.

其中两个配置参数就对应了Java文件中使用的参数log.jsp是登陆的视图页面,/model/是当前web应用的文件夹名称。mapping里面定义了对*.jsp进行过滤,如果程序中还有其他的页面,如.do或者.action等,那么可以继续添加这个选项,其中就填写*.do或者*.action即可。

这样对所有的页面都可以进行过滤。当然还可以为应用配置其他的过滤器,Tomcat容器会根据web.xml文件中的配置顺序将其设置称过滤器链挨个处理,处理到最后一个跳转到处理页面进行处理。后面会再配置一个控制权限的过滤器。

相关文档
最新文档