不放行,循环中直接return退出;
放行,循环中直接continue跳出。
过滤器在实际项目中的应用场景
过滤器在实际项目中的应用场景
1、对用户请求进行统一认证(判断当前用户是否符合认证条件,不符合时进行一些处理)——>登陆校验
2、编码转换(转换一些字符集编码,防止开发中乱码问题)
3、对用户发送的数据进行过滤替换(防止注入一些攻击,对参数进行检测和判别)
4、转换图像格式(对response进行后处理,并转换它的格式输出)
5、对响应的内容进行压缩(可以对内容进行加密操作,数据拿过来时进行加密,加密之后解析再返回给用户)
过滤器的实际应用场景
对用户请求进行验证
编码转换
过滤器在实际项目中的应用场景
1、对用户请求进行统一认证(判断当前用户是否符合认证条件,不符合时进行一些处理)——>登陆校验
2、编码转换(转换一些字符集编码,防止开发中乱码问题)
3、对用户发送的数据进行过滤替换(防止注入一些攻击,对参数进行检测和判别)
4、转换图像格式(对response进行后处理,并转换它的格式输出)
5、对响应的内容进行压缩(可以对内容进行加密操作,数据拿过来时进行加密,加密之后解析再返回给用户)
登录验证过滤器: 过滤规则:通过检查session中是否有用户信息来判断是否已经登录,登录则放行,未登录则重定向到登录页 过滤的路径: 1.简单的将要过滤的路径添加到配置文件中过(但经常会很多不推荐) 2.使用/*过滤所有,此时有一些不应过滤的路径(比如登录页本身),只能在doFilter中判断并放行.一种好的方式是:将不过滤的路径通过init-param提交,在doFilter通过循环来判断,这样只需要将不过滤的路径加到配置文件中即可 此外这一节演示了设置和读取init-param的方法
登录案例中的放行:
过滤器常见的使用场景
过滤器应用场景
EL表达式
${username}
获取当前项目的相对路径
<%=request.getContextPath()%>
过滤器在实际项目中的应用场景
登录校验 @LoginServlet.java public void doPost() { 1.进行账号和密码的校验 } @LoginFilter.java public void doFilter() { HttpServletRequest request = (HttpServletRequest) arg0; HttpServletResponse response = (HttpServletResponse) arg1; HttpSession session = request.getSession(); String noLoginPaths = config.getInitParameter("noLoginPaths"); if(noLoginPaths!=null){ String[] strArray = noLoginPaths.split(";"); for (int i = 0; i < strArray.length; i++) { if(strArray[i]==null || "".equals(strArray[i]))continue; if(request.getRequestURI().indexOf(strArray[i])!=-1 ){ arg2.doFilter(arg0, arg1); return; } } } if(session.getAttribute("username")!=null){ arg2.doFilter(arg0, arg1); }else{ response.sendRedirect("login.jsp"); } } public void init(FilterConfig arg0) throws ServletException { config = arg0; } @web.xml 在web.xml的Filter中配置Initial Parameters
在免过滤名单中加上fail.jsp 可解决输入错误后不跳转到fail.jsp界面的问题,但是带来新的问题 直接访问fail.jsp时不能转到登录页面。 解决方法:删掉免过滤名单上的fail.jsp ,在LoginServlet中将重定向换成转发,用request.getRequestDispatcher("/fail.jsp").forward(request, response);来代替response.sendRedirect("/fail.jsp");
1、HttpRequest和ServletRequest区别
2、FilterInit(FilterConfig)初始化的用法
3、requset.getRequestURI() //获取请求页面的相对路径
4、String的方法str.indexOf("XXX") //获取str内容"XXX"在那个位置第一位为0
5、String的方法str.split(";") //才分str为多个string,以";"为才分线
request.getContextPath();
save user info to session
在doFilter中获得ServletRequest convert to HttpServletRequest之后,request.getSession,接着在获得的session中设置
过滤的黑名单和白名单需要在FitlerConfig中配置
对于白名单放行
if true chain.doFilter
黑名单跳转到相应的处理页面
else response.sendRedirect
FilterConfig配置
filter url:/*(*号是全匹配)
request.getRequestURI();(获得当前request请求的URI地址,用于判断是否合法请求)
使用参数配置->init()->config.getInitParameter(name)(获得FilterConfig)
10