java 字符过滤器_Java Web---登录验证和字符编码过滤器

什么是过滤器?

在Java Web中,过滤器即Filter。Servlet API中提供了一个Filter接口(javax.servlet.Filter)。开发web应用时,假设编写的Java类实现了这个接口,则把这个Java类称之为过滤器Filter。

通过Filter技术,开发者能够实现用户在訪问某个目标资源之前,对訪问的请求和响应进行拦截。简单说。就是能够实现web容器对某资源的訪问前截获进行相关的处理,还能够在某资源向web容器返回响应前进行截获进行处理。

创建一个Filter的步骤

1.创建一个Filter处理类(实现javax.servlet.Filter接口)

2.在web.xml文件里配置Filter

Filter运行流程

1.Filter对用户的请求进行预处理

2.处理好后将请求交给Servlet处理并生成响应

3.最后Filter再对server响应进行后处理

字符编码过滤器

CharacterFilter.java

package org.LabReserve.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;

public class CharacterFilter implements Filter { //实现Filter接口

private String character; //保存字符编码的类型

@Override

public void destroy() { //在Filter销毁前。完毕某些资源的回收

}

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,

FilterChain filterChain) throws IOException, ServletException {

servletRequest.setCharacterEncoding("utf-8"); //能够直接设置编码

servletResponse.setCharacterEncoding(character); //也能够读取初始化的參数character

filterChain.doFilter(servletRequest, servletResponse); //转到下一个过滤器

}

@Override

public void init(FilterConfig fc) throws ServletException { //完毕Filter的初始化

//读取web.xml中Filter配置的初始化參数

character = fc.getInitParameter("character");

}

}

web.xml文件里的配置

CharacterFilter

org.LabReserve.filter.CharacterFilter

character

utf-8

CharacterFilter

/*

登录验证过滤器

LoginFilter.java

package org.LabReserve.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;

import javax.servlet.http.HttpSession;

public class LoginFilter implements Filter {

@Override

public void destroy() {

}

@Override

public void doFilter(ServletRequest servletRequest,

ServletResponse servletResponse, FilterChain filterChain)

throws IOException, ServletException {

// 转换为HTTP请求对象

HttpServletRequest request = (HttpServletRequest) servletRequest;

// 转化为HTTP响应对象

HttpServletResponse response = (HttpServletResponse) servletResponse;

// 获得请求相应的session对象

HttpSession session = request.getSession();

// 获得用户请求的URI

String path = request.getRequestURI();

// 不用验证登录过滤的页面

String[] noCheckPages = { "index.jsp","findPassword.jsp",

"LoginServlet","UserServlet",

"css","images","js"};

// int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。没找到则返回-1

for (int i = 0; i < noCheckPages.length; ++i) {

if (path.indexOf(noCheckPages[i]) > -1) {

// 转到下一个过滤器

filterChain.doFilter(servletRequest, servletResponse);

return; //不再过滤,防止页面重定向循环

}

}

// 假设session为null,说明用户是第一次訪问

if (session.getAttribute("userId") != null

|| session.getAttribute("teacherId") != null

|| session.getAttribute("adminId") != null) {

// 转到下一个过滤器

filterChain.doFilter(request, response);

} else {

// 又一次定向到首页

response.sendRedirect("index.jsp");

return; //不再过滤,防止页面重定向循环

}

}

@Override

public void init(FilterConfig arg0) throws ServletException {

}

}

web.xml文件配置

LoginFilter

org.LabReserve.filter.LoginFilter

LoginFilter

/*

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(1386):多人管理项目6骨架

blog.js const express require(express); //创建网站服务器 const app express(); //开放静态资源文件 const path require(path);//告诉express框架模板所在的位置 app.set(views, path.join(__dirname, views)); //告诉express框架模板的后缀是什么 app.set(view engine…

Error applying BeanValidation relational constraints错误的解决

错误示例&#xff1a;Exception in thread "main" org.hibernate.HibernateException: Error applying BeanValidation relational constraintsat org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.applyRelationalConstraints(BeanValidationIntegrator.…

前端学习(1387):多人管理项目7登录 数据库连接

blog.js const express require(express); //创建网站服务器 const app express(); //开放静态资源文件 const path require(path); require(./model/connect)//告诉express框架模板所在的位置 app.set(views, path.join(__dirname, views)); //告诉express框架模板的后缀是…

mysql教程丿it教程网_MySQL整体

整体大纲数据库实现数据持久化使用完整的管理系统统一管理&#xff0c;易于查询数据库的相关概念DB&#xff1a;数据库(database)&#xff1a;存储数据的“仓库”。它保存了一系列有组织的数据。DBMS数据库管理系统(Database Management System)。数据库是通过DBMS创建和操作的…

前端学习(1388):多人管理项目8user登录

blog.js const express require(express); //创建网站服务器 const app express(); //开放静态资源文件 const path require(path); require(./model/connect)//告诉express框架模板所在的位置 app.set(views, path.join(__dirname, views)); //告诉express框架模板的后缀是…

java 通用分页_一个通用的Java分页基类代码详解

分页的基类import java.util.List;/*** 分页显示的标准类,基本操作,是先给予-当前页数一共的数据条数-每页显示的条数,* 然后在初始化该类,得到总共页数,和开始序号和结束序号,* 然后数据库分页用到开始序号和结束序号,得到数据集合后赋值给该类的list属性,** 然后把该类发送到…

前端学习(1364):学生档案信息管理6

service.js //引入http模块 const http require(http); //创建网站服务器 const app http.createServer();const template require(art-template); const path require(path); const serveStatic require(serve-static);//静态资源服务 const serve serveStatic(path.jo…

lua元表(简单例子)

Set {} Set.mt {}--定义普通的表作为元表&#xff0c;为了避免命名污染直接放在Set内部 function Set.new(t)local set {}setmetatable(set, Set.mt)--一组相关的表共享一个metatable(通过这个可以描述他们共同的行为)&#xff0c;一个表也可以是自身的metatable(描述私有行…

java windows7 环境变量_Windows7环境变量中,系统变量与用户变量的优先级

就我理解&#xff0c;不存在先后区别。因为系统变量和用户变量完全不是一回事情&#xff0c;因此某个用户登录他的账户&#xff0c;并且启用了用户变量&#xff0c;那么它会先检查用户变量&#xff0c;如果没有检查到就检查系统变量&#xff0c;都没有则报错。如果按照这样的理…

前端学习(1389):多人管理项目9登录功能具体实现

blog.js const express require(express); //创建网站服务器 const app express(); //开放静态资源文件 const path require(path); require(./model/connect)//告诉express框架模板所在的位置 app.set(views, path.join(__dirname, views)); //告诉express框架模板的后缀是…

英语常见介词错误用法,你有犯过吗?

英语常见介词错误用法&#xff0c;你有犯过吗&#xff1f; 1:错:come to here. 对:come here. 过来。here ,there,home之类的副词&#xff0c;前面不用介词in ,at,(但可以加from,比如from home,from here),直接跟在动词come 后面就可以了。2:错:look at the mirror. 对:look in…

java弹出提示窗口_Java实现弹窗效果的基本操作(2)

本文为大家分享了Java实现弹窗效果的实现代码&#xff0c;供大家参考&#xff0c;具体内容如下1、任务简介我在5月23日写过一篇文章为《Java弹窗操作》&#xff0c;从目前来看浏览量不错&#xff0c;故我将之前省略了的两个程序分享出来&#xff0c;同时也将更多的方法分享出来…

前端学习(1390):多人管理项目10服务器认证

blog.js const express require(express); //创建网站服务器 const app express(); //开放静态资源文件 const path require(path); require(./model/connect)//告诉express框架模板所在的位置 app.set(views, path.join(__dirname, views)); //告诉express框架模板的后缀是…

C# 控制台或者winform程序开启http的监听状态

1 public class THttpListener2 {3 HttpListener listerner;4 /// <summary>5 /// 6 /// </summary>7 /// <param name"prefixes">格式 http://*/test/ </param>8 /// <param name&…

前端学习(1391):多人管理项目11邮箱地址查询信息

blog.js //管理页面 //展示页面 const express require(express);const admin express.Router();admin.get(/login, (req, res) > {res.render(admin/login) }); admin.get(/user, (req, res) > {res.render(admin/user) }); admin.post(/login, async(req, res) >…

java tea属于红茶吗_什么茶属于红茶类

茶叶在中国的历史已经非常悠久了。相信很多人都喝过红茶&#xff0c;红茶种类还是比较多的&#xff0c;那么知道什么茶属于红茶类吗&#xff1f;平时买回来的红茶该怎么保存比较好呢&#xff1f;什么茶属于红茶类 1、中国的红茶种类还是比较多的。其中滇红&#xff0c;祁红&…

前端学习(1392):多人管理项目12加密

blog.js //管理页面 //展示页面 const express require(express);const admin express.Router();admin.get(/login, (req, res) > {res.render(admin/login) }); admin.get(/user, (req, res) > {res.render(admin/user) }); admin.post(/login, async(req, res) >…

【c++ primer读书笔记】【第2章】变量和基本类型

1、 无符号类型 含有无符号类型的表达式&#xff0c;当一个算式表达式中既有unsigned int&#xff0c;又有int时&#xff0c;int会转化为unsigned int&#xff0c; 如int a-1&#xff0c;unsigned b1&#xff0c;则在我的机器中a*b4294967295。 无符号数不会小于0也关系到循环…

java 注入 循环_spring依赖注入——循环依赖

上一篇博客简单地分析了下依赖注入。但是对于依赖注入的很多细节&#xff0c;都没有深入的分析。这一篇博客会继续分析spring的依赖注入。这篇博客会解决分析getBean缓存时候遗留下来的循环依赖问题。循环依赖分析首先明确下&#xff0c;只有单例情况下&#xff0c;spring才会试…

前端学习(1393):多人管理项目13加密实现

blog.js //管理页面 //展示页面 const express require(express);const admin express.Router();admin.get(/login, (req, res) > {res.render(admin/login) }); admin.get(/user, (req, res) > {res.render(admin/user) }); admin.post(/login, async(req, res) >…