Filter过滤器笔记1
Filter:过滤器
Filter主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。使用Filter的完整流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理
创建Filter的步骤:
1.创建Filter处理类
2.在web.xml文件中配置Filter(或者直接使用注解)
创建Filter必须实现javax.servlet.Filter接口,在该接口中定义了三个方法。
void init(FilterConfig config):用于完成Filter的初始化
void destroy():用于Filter销毁前,完成某些资源的回收
void doFilter(ServletRequest request,ServletResponse response,FilterChain chain):实现过滤功能,该方法就是对每个请求以及响应增加的额外处理
下面示例一个比较实用的Filter,该Filter对用户请求进行过滤,Filter将通过doFilter方法来设置request编码的字符集,从而避免每个jsp,Servlet都需要设置,而且还会验证用户是否登录,如果用户没有登录,系统直接跳转到登录页面。
程序例子:
/**
* Description:设置request的编码集,并验证用户是否登录
* Author: Eleven
* Date: 2018/1/6 15:43
*/
@WebFilter(filterName = "loginFilter",
urlPatterns = {"/*"}, //该Filter拦截该项目下的所有用户请求
initParams = {//配置Filter初始化参数
@WebInitParam(name="encoding",value="GBK"),
@WebInitParam(name="loginPage",value="/login.jsp")})
public class LoginFilter implements Filter { //FilterConfig可用于访问Filter的配置信息
private FilterConfig config; @Override
public void init(FilterConfig filterConfig) throws ServletException {
this.config = filterConfig;
} @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
//获取Filter的配置参数
String encoding = config.getInitParameter("encoding");
String loginPage = config.getInitParameter("loginPage"); //设置request编码用的字符集
servletRequest.setCharacterEncoding(encoding);
System.out.println("设置编码完成");
HttpServletRequest request = (HttpServletRequest) servletRequest;
//获取客户请求的页面
String requestPath = request.getServletPath();
System.out.println("用户请求页面:"+requestPath);
//判断用户是否登录
HttpSession session = request.getSession();
//没有登录,且访问页面不是登录也页面
if(session.getAttribute("user") == null && !requestPath.endsWith(loginPage)){
//转发到登录页面
request.getRequestDispatcher("/jsp/login.jsp").forward(servletRequest,servletResponse);
}else{
//放行
chain.doFilter(servletRequest,servletResponse);
} } @Override
public void destroy() {
this.config = null;
}
}
Filter的种类:
1.用户授权的Filter:Filter负责检查用户请求,根据请求过滤用户非法请求
2.日志Filter:详细记录某些特殊的用户请求
3.负责解码的Filter:包括对非标准编码的请求解码
4.能改变XML内容的XSLT Filter等
5.Filter可负责拦截多个请求或响应;一个请求或响应也可被多个Filter拦截
Filter过滤器笔记1的更多相关文章
- angularjs学习第三天笔记(过滤器第二篇---filter过滤器及其自定义过滤器)
您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点 ...
- SpringBoot+Shiro学习(七):Filter过滤器管理
SpringBoot+Shiro学习(七):Filter过滤器管理 Hiwayz 关注 0.5 2018.09.06 19:09* 字数 1070 阅读 5922评论 1喜欢 20 先从我们写的一个 ...
- filter 过滤器(监听)
Filter 过滤器 1.简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, ...
- Java防止SQL注入2(通过filter过滤器功能进行拦截)
首先说明一点,这个过滤器拦截其实是不靠谱的,比如说我的一篇文章是介绍sql注入的,或者评论的内容是有关sql的,那会过滤掉:且如果每个页面都经过这个过滤器,那么效率也是非常低的. 如果是要SQL注入拦 ...
- Filter(过滤器)学习
一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...
- javaweb学习总结(四十二)——Filter(过滤器)学习
一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...
- Filter过滤器简单应用( 接口访问控制 )
一.描述 在提供安卓.IOS客户端接口时,可以在登陆接口分配Session给客户端,用于判断其他接口是否是合法访问,以避免将所有的接口都暴露在web中可以由路径直接访问.但是最近的一个项目中的移动接口 ...
- 如何配置Filter过滤器处理JSP中文乱码
参考Tomcat服务器目录webapps的examples示例 简单配置步骤:1.在项目web.xml文件添加过滤器标记<filter>和<filter-mapping>:2. ...
- Filter(过滤器)常见应用
孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(四十六)——Filter(过滤器)常见应用 一.统一全站字符编码 通过配置参数charset指明使用何种字符编码,以处理Html F ...
随机推荐
- os--留
os.path.abspath(path) #返回绝对路径 绝对路径和文件路径的区别,绝对路径是当前在操作文本的路径,文件路径是当前文本的文件的路径 os.path.basename(path) ...
- ASP.NET Core 2.1 源码学习之 Options[3]:IOptionsMonitor 【转】
原文链接:https://www.cnblogs.com/RainingNight/p/strongly-typed-options-ioptions-monitor-in-asp-net-core. ...
- python学习总结----时间模块 and 虚拟环境(了解)
time - sleep:休眠指定的秒数(可以是小数) - time:获取时间戳 # 获取时间戳(从1970-01-01 00:00:00到此刻的秒数) t = time.time() print(t ...
- packstack测试环境安装heat
虚机all in one环境测试安装heat [root@armstrong ~]# tmux at -t mysql MariaDB [(none)]> CREATE DATABASE hea ...
- Mysql DISTINCT问题
问题描述 因为要设计一个数据库表,进行一个倒序去重的操作. 例如: id Name 1 B 2 A 3 A 4 C 5 C 6 B 场景:例如说我们需要得到一个用户的搜索记录,那么肯定不会仅仅根据时间 ...
- python中的re模块,常用函数介绍
参考: http://www.cnblogs.com/tina-python/p/5508402.htm ======== 1,预定义字符集,可以写在字符集[....]中 \d 数字: \D 非数字 ...
- 史林枫:sqlserver数据库中数据日志的压缩及sqlserver占用内存管理设置
使用sqlserver和IIS开发.net B/S程序时,数据量逐渐增多,用户也逐渐增多,那么服务器的稳定性就需要维护了.数据库如何占用更小内存,无用的日志如何瞬间清空? 今天在给一个客户维护网站的时 ...
- PHP生成随机数函数rand(min,max)
rand(min,max):生成min到max 的随机数,注意:包括边界rand() 返回 0 到 RAND_MAX 之间的伪随机整数.例如,想要 5 到 15(包括 5 和 15)之间的随机数,用 ...
- Oracle 11g R2 64位在 win7 64位的安装流程图解
1.下载安装包,可以到oracle官方网站.也可以在这里下载: http://pan.baidu.com/s/1X9xDk 2.解压2个安装包,到同一个database目录: 3.点击database ...
- ngrepeat 时注意的地方和一些little tricks
angularjs的一些使用经验总结,此篇文章单谈ng指令之一ngrepeat 1. ngrepeat 时报错 Duplicates in a repeater are not allowed, 正常 ...