Cookie[] cookies = request.getCookies();
String[] names = new String[] {"email", "password", "remember"};
for(Cookie cookie : cookies) {
String name = cookie.getName();
if(Arrays.binarySearch(names, name) >= 0) {
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
1: 过滤器(Filter)
1): 过滤器是什么
过滤器(Filter)是javaWeb中三大组件之一,三大组件(Servlet, Filter, Listener)
2): Filter的作用
对于web应用来说,过滤器就是驻留在服务器的web组件,它的作用则是截取(拦截)浏览器客户端与请求资源之间的请求与响应信息
并且对这些信息进行筛选过滤
3): 使用Filter
a): 创建一个类实现Filter接口
b): 在web.xml中添加配置
<filter>
<filter-name>HelloFilter</filter-name>
<filter-class>com.tz.srevlet.filter.HelloFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HelloFilter</filter-name>
<url-pattern>/helloServlet</url-pattern>
</filter-mapping>
c): 也可以使用注解配置一个Filter
如: @WebFilter("/helloServlet")
4): 一个Filter过滤的过程
a): 在web容器接收一个请求时, 它则会判断是否有过滤器与这个请求的资源关联
b): 如果有关联则会把这个请求交给过滤器来处理,在过滤器里则可以操作请求信息(比如对请求信息的改变,或者判断跳转等等)
c): 当需要给浏览器一个响应时,同样也会先把响应信息转发给过滤器,执行Filter中放行后没有执行完的代码,在这里则可以对响应信息进行操作
d): 最后再把响应发送给浏览器
5): Filter接口的方法(生命周期)
a): init(FilterConfig filterConfig)
在容器启动时,则会启用Filter的构造方法和init方法(只调用一次)
b): doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
每次在拦截请求时都会调用这个doFilter方法,逻辑代码则会写在这个doFilter方法中
c): destroy()
在Filter被销毁前则会调用destroy方法,如关闭容器时(只会调用一次)
6): FilterConfig
getFilterName() 获取Filter的名字
getInitParameter(java.lang.String name) 获取Filter的初始化参数值
在@WebFilter配置
如: @WebFilter(
urlPatterns = "/helloServlet",
initParams = {
@WebInitParam(name="user", value="小红妹妹"),
@WebInitParam(name="password", value="123")
}
)
在web.xml中
<filter>
<filter-name>HelloFilter</filter-name>
<filter-class>com.tz.srevlet.filter.HelloFilter</filter-class>
<init-param>
<param-name>user</param-name>
<param-value>小红妹妹</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123</param-value>
</init-param>
</filter>
getInitParameterNames() 获取Filter所有的初始名
getServletContext() 获取到一个ServletContext
7): FilterChain的接口方法(只有一个doFilter方法)
doFilter(ServletRequest request, ServletResponse response)
"放行", 表示调用Filter链中的下一个Filter, 如果调用的Filter是Filter链中的最后一个Filter, 则会导致调用链末端的资源被调用
8): Filter链
9): Filter的执行的顺序
Filter的执行顺序 与filter-mapping配置的顺序有关
10):Filter的四种过滤方式
error //当资源是通过异常处理机制来调用访问时,才会进入到Filter
forward //当以转发形式访问资源时,才会进入到Filter
include //当以包含访问资源时,才会进入到Filter
request //当直接访问资源时,才会进入到Filter
在@WebFilter中配置
如: @WebFilter(
urlPatterns = "/jsp/*",
//dispatcherTypes = DispatcherType.FORWARD
//dispatcherTypes = DispatcherType.INCLUDE
//dispatcherTypes = DispatcherType.ERROR
//dispatcherTypes = DispatcherType.REQUEST
dispatcherTypes = { //配置多种过滤的方式
DispatcherType.REQUEST,
DispatcherType.INCLUDE,
DispatcherType.FORWARD
}
)
在web.xml中配置
如: <filter-mapping>
<filter-name>CFilter</filter-name>
<url-pattern>/jsp/*</url-pattern>
<dispatcher>ERROR</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>