通过Filter来定义一个登录验证过滤器,这是就不需要在每一个JSP页面添加判断用户合法性的代码了。

以下示例中包含了5个文件,一个是登录表单LoginForm.jsp,一个是登录判断页LoginConf.jsp,

一个是登录验证过滤器LoginFilter.java,一个是登录成功页面LoginSucess.jsp,一个是登录失败

页面Loginfailure.jsp。

LoginForm.jsp

 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

 <html>
<head><title>用户登录</title></head> <body>
<center>
<form action="LoginConf.jsp" method="post">
<table>
<tr>
<td colspan="2">用户登录</td>
</tr>
<tr>
<td>用户名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密&nbsp;&nbsp;码</td>
<td><input type="password" name="userpassword"></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="登录">
<input type="reset" value="重置">
</td>
</tr>
</table>
</form>
</center>
</body>
</html>

LoginConf.jsp

 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

 <html>
<head><title>登录判断</title></head> <body>
<center>
<%
//接受用户名,密码参数
String username=request.getParameter("username");
String userpassword = request.getParameter("userpassword"); //判断用户名以及密码,如果为指定用户则跳转到登陆成功页面。
if("CeShi".equals(username)&&"123456".equals(userpassword)){
session.setAttribute("username",username);
%>
<jsp:forward page="LoginSuccess.jsp"/>
<%
}
//如果不是指定用户,则跳转到登录失败页面
else{
%>
<jsp:forward page="LoginFailure.jsp" />
<%
}
%>
</center>
</body>
</html>

LoginFilter.java

 package com.mhb;

 import java.io.IOException;

 import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; public class LoginFilter implements Filter { //初始化方法
public void init(FilterConfig arg0) throws ServletException {
System.out.println("登录验证过滤器初始化!");
} //过滤方法
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)req;
//获得session对象
HttpSession session = request.getSession();
String login = (String) session.getAttribute("username"); //如果是登录判断页面,不用进行过滤检查
if("/JavaWeb/LoginConf.jsp".equals(request.getRequestURI())){
chain.doFilter(req, res);
}else{
//判断用户是否进行登录,如果进行了登录则继续操作,否则跳转到登录页面
if(login == null || "".equals(login)){
request.getRequestDispatcher("LoginForm.jsp").forward(req, res);
}else{
chain.doFilter(req, res);
}
}
} //销毁方法
public void destroy() {
System.out.println("登录验证过滤器销毁!");
}
}

LoginSuccess.jsp

 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

 <html>
<head><title>登录成功</title></head> <body>
<center>
<h1>登录成功</h1>
${sessionScope.username}欢迎您的登录!
</center>
</body>
</html>

LoginFailure.jsp

 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

 <html>
<head><title>登录失败</title></head> <body>
<h1>登录失败</h1>
</body>
</html>

web.xml配置

   <filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.mhb.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

验证过程:

  1)在浏览器中直接输入登录页面,输入正确用户名密码(CeShi,123456)跳转至成功页面。

2)在浏览器中直接输入登录页面,输入错误的用户名密码跳转至登录失败页面。

3)在浏览器中直接输入登录成功页面,直接跳转至登录页面(此步骤注意清空浏览器缓存)。

最新文章

  1. PHP是怎么运行的
  2. FTP Service mode : PORT &amp; PASV
  3. Charles常用的十大功能
  4. tcp_tw_recycle 的问题, 使用某一个wifi,APP老是连接不上网络
  5. [LeetCode]题解(python):090 Subsets II
  6. uboot启动内核(3)
  7. Tensorflow 上手——手写数字识别
  8. C#中的事件-订阅与发布
  9. LR测试工具性能指标详解
  10. zznu 1073: 海军节上的鸣炮声计算
  11. jquery中prop()方法和attr()方法的区别(转)
  12. JavaScript笔记整理
  13. PowerShell 语法备忘
  14. lua --- dofile、loadfile、require
  15. 14款优秀的JavaScript调试工具大盘点
  16. 51nod 1413 权势二进制
  17. redis在PHP中的基本使用案例(觉得比较实用)
  18. Unity3d ugui 实现image代码换图
  19. ExcelReader(解析Excel的工具类)
  20. 【转载】C/C++杂记:运行时类型识别(RTTI)与动态类型转换原理

热门文章

  1. c++迭代器(iterator)详解
  2. HTTP报文格式
  3. JPages分页插件的使用
  4. WWDC 2016: Rich Notifications in iOS 10
  5. VS2010 配置opencv环境
  6. ios开发之网络数据的下载与上传
  7. 【WCF--初入江湖】11 安全
  8. uva 307
  9. javascript中li标签的排序和数组sort的用法
  10. java基础知识回顾之java Thread类学习(六)--java多线程同步函数用的锁