您的位置:首页 > 编程语言 > Java开发

过滤器Filter知识点及两种应用:编码过滤和登陆验证

2018-04-02 16:36 441 查看

一。基础知识

使用过滤器功能:当需要限制用户访问某些资源/处理请求时候提前处理资源
特点:以组件的形式绑定到web应用程序;链方式处理;可以定义多个;在容器启动时自动加载(与servlet不同)
实现一个过滤器:实现Filter接口,复写相关方法
接口中的三个方法:
1.public void init(FilterConfig FliterConfig)
2.public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException
重要:放行与否取决于filterchain(用户请求向下传递)chain.doFilter(request,response)
调用接口filterchain中的public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException
可能传递给下个过滤器,也可能传给客户端
3.public void destroy()


二。过滤器的配置(谁在前面配置就先加载谁)

1.注解配置(web 3.0模块才可以)
2.web.xml配置
<filter>
<fliter-name></filter-name>
<filter-class>包.类</filter-class>
<init-param> //配置初始化值
<param-name></param-name>
<param-value></param-value>
</init-param>
</filter>

<fliter-mapping>
<fliter-name></filter-name>
<url-pattern>/xx/*</url-pattern> 根目录下的xx文件夹下的,决定请求哪个目录时过滤
</filter-mapping>

过滤路径配置类型(不能将两种结合):
1.以目录的方式:/images/*
2.以资源类型:*.jpg
最好先配置过滤器-监听器-其他的


三。过滤器的应用:

1.编码过滤(编码过滤解决输入中文时的乱码问题)
请求提交时参数先经过web容器编码,tomcat默认编码为iso-8859-1。
request.setCharacterEncoding("utf-8");//改变请求编码

表单一般都是post提交,但是如果是get提交的话,以上方法不行,仍然使用的是iso-8859-1
解决方法:String wrongStr=request.getParameter("参数名");
         String rightStr=new String(wrongStr.getBytes(iso-8859-1),"utf-8");//

在过滤器中设置编码:
在web.xml中设置初始化值,name:encode,value:utf-8
定义一个全局变量,初始化方法中接受utf-8这个参数值(encode参数名)this.encode=request.getParameterName(encode),doFilter()中设置请求编码request.setCharacterEncoding(encode);

2.登陆验证:在过滤器中判断session属性是否为空,从而进行登陆验证
获取session:
HttpServletRequest req=(HttpServletRequest)request;
HttpSession session=req.getSession();
if(session.getAttribute()!=null)
//如果session范围中属性不为null则放行
chain.doFilter(request,response)
//否则
HttpServletResponse resp=(HttpServletResponse)response;
String contextPath=request.getServletContext().getContextPath();//动态获取路径
resp.sendRedirect(contextPath+"/login/login.jsp");//如果没有登陆,则重定向到这个页面
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  filter java jsp