`

检验用户名、密码、字符编码、页面缓存----Filter的基本使用

阅读更多

login.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

	<font color="red">${requestScope.errormsg }</font>
	<br><br>

	<form action="hello.jsp" method="post">
		Name: <input type="text" name="name"/><br><br>
		Password: <input type="password" name="password"/><br><br>
		<input type="submit" value="Submit"/>
	</form>

</body>
</html>



hello.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h4>Hello Page</h4><br><br>
	
	<%
		//request.setCharacterEncoding("UTF-8") ;
	%>
	
	hello : ${param.name }<br><br>
	
</body>
</html>



EncodingFilter.java


package com.syh.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * 字符编码过滤器,在设置这个过滤器的时候,还要将Tomcat的一个配置改变:
 * 修改 Tomcat 服务器的 conf 目录下的 server.xml 文件中的  <Connector> 为(67 行)
		<Connector port="8989" protocol="HTTP/1.1" 
		  connectionTimeout="20000" 
		redirectPort="8443" useBodyEncodingForURI="true" />,再次重新启动Tomcat服务器
 * @author Administrator
 *
 */

public class EncodingFilter implements Filter {

	private FilterConfig config ;
	
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		this.config = filterConfig ;
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		
		//1. 获取 ServletContext 对象
		ServletContext servletContext = config.getServletContext() ;
		
		//2. 获取 encoding 的初始化参数
		String encoding = servletContext.getInitParameter("encoding") ;
		
		//3. 设置 request 的字符编码
		request.setCharacterEncoding(encoding) ;
		
		chain.doFilter(request, response) ;
		
	}

	@Override
	public void destroy() {

	}

}




NoCacheFilter.java


package com.syh.filter;

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.HttpServletResponse;

/**
 * 使浏览器不缓存页面的过滤器
 * @author Administrator
 *
 */

public class NoCacheFilter implements Filter {

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {

	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
		HttpServletResponse response = (HttpServletResponse) resp ;
		
		// 并不是所有的浏览器都能完全支持上面的三个响应头, 因此最好是同时使用下面的三个响应头
		response.setDateHeader("Expires",-1);
		response.setHeader("Cache-Control","no-cache");
		response.setHeader("Pragma","no-cache");
		
		chain.doFilter(req, resp) ;
		
	}

	@Override
	public void destroy() {

	}

}




NameFilter.java


package com.syh.filter;

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;

/**
 * 用户名检验过滤器
 * @author Administrator
 *
 */

public class NameFilter implements Filter {

	private FilterConfig config ;
	
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		this.config = filterConfig ;
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		
		//1. 获取表单中 name 的参数
		String paramName = request.getParameter("name") ;
		
		//2. 获取当前 Filter 中 name 的参数
		String initName = config.getInitParameter("name") ;
		
		//3. 比较
		if(paramName != null && initName.equals(paramName)) {
			//3.1  匹配,放行
			chain.doFilter(request, response) ;
		}else {
			
			//3.2 不匹配, 将页面转发到 /login.jsp, 并提示用户 "您输入的用户名不同"
			request.setAttribute("errormsg", "您输入的用户名" + paramName + "不同") ;
			request.getRequestDispatcher("/login.jsp").forward(request,response) ;
		}
		
		
	}

	@Override
	public void destroy() {

	}

}




PasswordFilter.java


package com.syh.filter;

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;

/**
 * 密码检验过滤器
 * @author Administrator
 *
 */

public class PasswordFilter implements Filter {

	private FilterConfig config ;
	
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		this.config = filterConfig ;
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		
		//1.获取表单中 password 的参数
		String paramPassword = request.getParameter("password") ;
		
		
		//2. 获取当前 Filter 的 password 的参数
		String initPassword = config.getInitParameter("password") ;
		
		//3. 比较
		if(paramPassword != null && initPassword.equals(paramPassword)) {
			//3.1 匹配, 放行
			chain.doFilter(request, response) ;
		} else {
			
			//3.2 不匹配, 将页面转发到 /login.jsp, 并提示用户 "您输入的密码不正确"
			request.setAttribute("errormsg", "您输入的密码不正确") ;
			request.getRequestDispatcher("/login.jsp").forward(request, response) ;
		}
	}

	@Override
	public void destroy() {

	}

}





<!-- 字符编码的参数 -->

	<context-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</context-param>

	<!-- 字符编码的检验 -->

	<filter>
		<filter-name>EncodingFilter</filter-name>
		<filter-class>com.syh.filter.EncodingFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>EncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<!-- 浏览器缓存的检验 -->

	<filter>
		<filter-name>NoCacheFilter</filter-name>
		<filter-class>com.syh.filter.NoCacheFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>NoCacheFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<!-- 用户名的检验 -->
	<filter>
		<filter-name>NameFilter</filter-name>
		<filter-class>com.syh.filter.NameFilter</filter-class>
		<init-param>
			<param-name>name</param-name>
			<param-value>Tom</param-value>
		</init-param>
	</filter>

	<filter-mapping>
		<filter-name>NameFilter</filter-name>
		<url-pattern>/hello.jsp</url-pattern>
	</filter-mapping>

	<!-- 用户名的检验 -->

	<filter>
		<filter-name>PasswordFilter</filter-name>
		<filter-class>com.syh.filter.PasswordFilter</filter-class>
		<init-param>
			<param-name>password</param-name>
			<param-value>1234</param-value>
		</init-param>
	</filter>

	<filter-mapping>
		<filter-name>PasswordFilter</filter-name>
		<url-pattern>/hello.jsp</url-pattern>
	</filter-mapping>

分享到:
评论

相关推荐

    regedit.jsp 表单注册用户名密码

    - 设置请求字符编码为 UTF-8。 - 使用 JSP 标准动作 `jsp:useBean` 创建 `QueryBean` 对象来执行 SQL 查询和更新操作。 - 先查询数据库中是否已存在相同的用户名,如果存在,则提示用户重试;如果不存在,则插入...

    js注册检测 用户名、密码、手机号、邮箱

    在JS中,可以使用if语句来检测密码的长度和特殊字符。例如: `if(checkpsw.length &gt; 5 && checkpsw.length){...}` 这个if语句可以检测密码的长度是否在6-20个字符之间。 三、手机号检测 手机号检测是指检测用户...

    Java 所有字符串转UTF-8 万能工具类-GetEncode.java

    不需要关心接受的字符串编码是UTF_8还是GBK,还是ios-8859-1,自动转换为utf-8编码格式,无需判断字符串原有编码,用法://处理编码String newStr = GetEncode.transcode(oldStr);

    将字符串从常用编码转为utf-8编码(java)

    Java字符串编码查询及转换,可将常用的一些编码格式转换成utf-8

    默认路秘密集合

    默认路由秘密集合指的是路由器设备出厂时预设的一组默认的用户名和密码,这些信息通常用于初次设置或恢复设备至出厂设置后进行网络配置。这些默认的登录凭据使得用户能够访问路由器的管理界面,以便配置网络参数、...

    GB 2312-1980 信息交换用汉字编码字符集 基本集.rar

    ### GB 2312-1980 信息交换用汉字编码字符集 基本集 #### 一、GB 2312-1980简介 GB 2312-1980是中华人民共和国国家技术监督局于1980年发布的信息交换用汉字编码字符集的基本集,它是中国最早的一套国家标准汉字...

    C# 生成xml文件,编码为utf-8方法

    最后,使用 MemoryStream 对象的 ToArray 方法将 XML 数据转换为 byte 数组,然后使用 Encoding.UTF8.GetString 方法将其转换为 UTF-8 编码的字符串。 在上面的代码中,首先创建了一个 MemoryStream 对象,然后创建...

    JSP登陆验证 实现JSP用户名 密码 验证码验证登陆

    本项目着重于实现一个JSP登录系统,包括用户名、密码以及验证码的验证功能。以下是关于这个项目的关键知识点: 1. **JSP基本结构**: JSP页面由静态内容(HTML、CSS、JavaScript)和动态元素(Java代码)组成。在...

    关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换

    ### 关于JAVA字符编码:Unicode, ISO-8859-1, GBK, UTF-8 编码及相互转换 在Java开发过程中,字符编码是处理文本数据的基础,不同的编码方式会影响数据的存储、传输以及显示。本文将详细介绍几种常见的字符编码...

    ut8字符编码查询.rar

    UTF-8字符编码是一种广泛使用的Unicode字符编码方案,它的全称是“8位 Unicode 转换格式”。这个“ut8字符编码查询.rar”压缩包文件显然是为了帮助用户查询和理解UTF-8编码与GB2312、UTF-8以及Unicode编码之间的转换...

    免费友情链接网自动收录

    后台管理地址adminmaster 用户名:admin 密码123456 -------------------------------------------------------------------------------------- 免费友情链接网自动收录 asplian.com 20101025版 和上一次公布版本...

    DELPHI 10.3编码转换 iso-8859-1转GBK,GBK转iso-8859-1

    `ISO-8859-1`是一种单字节编码标准,它包含了西欧语言的基本字符,如拉丁字母、数字、标点符号等。而`GBK`是中文扩展的编码标准,主要服务于简体中文环境,它在GB2312的基础上增加了许多繁体字和少数其他语言的字符...

    ZTEC600新建账号密码并赋予登录权限

    注意这里使用的密码可能包含特殊字符,确保密码强度符合安全标准。 - **`ZXAN(config-system-user-username)#exit`** - 退出当前配置模式。 - **`ZXAN(config-aaa-authen-template)#aaa-authentication-type ...

    解决字符编码的过滤器

    在深入了解如何通过Struts2框架中的Servlet过滤器解决字符编码问题之前,我们先简要回顾一下字符编码的基本概念。字符编码是将计算机内部二进制数据转换为人类可读的文字的过程。常见的字符编码方式包括ASCII、GBK、...

    CDPHOTO324SP.EXE用户名密码

    根据提供的文件信息,“CDPHOTO324SP.EXE用户名密码”,我们无法直接解析出具体的IT知识点或背景信息。但从标题、描述、标签以及部分给出的内容来看,这似乎与某个软件(可能是CDPHOTO324SP.EXE)的用户名和密码相关...

    百种路由器出厂默认用户名及密码

    总的来说,理解路由器的默认用户名和密码,以及它们在网络安全中的角色,是每个网络使用者的基本技能。正确管理和保护这些信息,可以有效防止未经授权的访问,保护个人和家庭的网络环境。同时,及时更新设备设置和...

    Quoted-printable 编码介绍、Quoted-printable编码解码转换方法

    Quoted-printable编码是一种用于电子邮件传输中的字符编码方案,它允许文本包含一些非ASCII字符,同时保持邮件的可读性。Quoted-printable编码利用可打印的ASCII字符来表示原始数据中可能无法直接显示的字节,尤其是...

    修改tomcat的编码为utf-8

    - **使用工具检测:** 使用浏览器或其他工具检测页面的编码格式是否为UTF-8。 #### 四、常见问题及解决方法 - **乱码问题:** 如果仍然存在乱码问题,检查是否在前端(如HTML页面)和后端(如数据库)也设置了正确...

    字符编码详情.pdf

    - **简介**:UTF-8是Unicode的一种实现方式,采用可变长度的编码方式,对于英文字符仍然使用单字节编码,对于其他语言的字符则使用多字节编码。 - **特点**:兼容ASCII码,易于网络传输,并且对于英文文本来说存储...

Global site tag (gtag.js) - Google Analytics