- Filter的理解
- filter写法
- 1.接口创建
- 2.配置映射关系
- 3.filter的周期
- filter的作用
- 应用方面
- 多个过滤器的执行先后问题
- 多个过滤器的执行先后问题
javaweb三大组件:servlet,filter过滤器,listener监听器
filter写法 1.接口创建public class MyFilter implements Filter {
public MyFilter() {
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
2.配置映射关系
filter标签部分定义使用的过滤器,filter-mapping标签告诉服务器把哪些请求交给过滤器处理。这里的/表示所有请求,/表示根路径,(星号)代表所有请求,加在一起就变成了根路径下的所有请求。
<filter>
<filter-name>MyFilter</filter-name><!--过滤器名称-->
<filter-class>com.dyz.filter.MyFilter</filter-class><!--类全限定名(类路径)-->
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name><!--和上边的filter-name保持一致-->
<url-pattern>*.jsp</url-pattern><!--拦截路径,这个表示拦截所有以.jsp结尾的文件-->
</filter-mapping>
3.filter的周期
public class MyFilter implements Filter {
public MyFilter() {
System.out.println("实例化Filter");
}
public void destroy() {
System.out.println("销毁Filter");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("进入doFilter");
// chain.doFilter(request, response);//放行
}
public void init(FilterConfig fConfig) throws ServletException {
System.out.println("初始化Filter");
}
}
filter的作用
- 它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response.换种说法,filter其实是一个”servlet chaining”(servlet 链).
例如:用filter控制用户访问权限
public class SecurityFilter implements Filter {
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession();
if (session.getAttribute("username") != null) {
chain.doFilter(request, response);
} else {
res.sendRedirect("../failure.jsp");
}
}
出于信息安全和其他一些原因的考虑,项目中的一些页面要求用户满足了一定条件之后才能访问(让用户输入帐号和密码),如果输入的信息正确就在session里做一个成功的标记,这里的成功标志就是session中的username有值;其后在请求保密信息的时候判断session中是否有已经登录成功的标记,存在则可以访问,不存在则禁止访问。
得到了http请求之后,可以获得请求对应的session,判断session中的username变量是否为null,如果不为null,说明用户已经登录,就可以调用doFilter继续请求访问的资源。如果为null,说明用户还没有登录,禁止用户访问,并使用页面重定向跳转到failure.jsp页面显示提示信息。
多个过滤器的执行先后问题如果为注解配置,按照类名的字符串大小决定先后
web.xml配置:谁在上方谁先执行
执行时按照栈的数据结构先进后出,即先进后结束进程。
多个过滤器的执行先后问题如果为注解配置,按照类名的字符串大小决定先后
web.xml配置:谁在上方谁先执行
执行时按照栈的数据结构先进后出,即先进后结束进程。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)