一、自定义过滤器
创建一个过滤器,实现javax.servlet.Filter接口,并重写其中的init、doFilter、destory方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
package com.example.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; /** * 实现javax.servlet.Filter,覆盖其三个方法 * @author Administrator * */ @WebFilter (filterName= "customFilter" ,urlPatterns= "/*" ) public class CustomFilter implements Filter{ @Override public void destroy() { System.out.println( "CustomFilter过滤器销毁" ); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println( "CustomFilter指定过滤器操作......" ); //执行操作后必须doFilter chain.doFilter(request, response); } @Override public void init(FilterConfig arg0) throws ServletException { System.out.println( "CustomFilter初始化......" ); } } |
二、自定义监听器
创建一个过滤器,实现ServletContextListener接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package com.example.listener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; /** * 实现ServletContextListener,覆盖其两个方法 * @author Administrator * */ @WebListener public class CustomListener implements ServletContextListener{ @Override public void contextDestroyed(ServletContextEvent servletContext) { System.out.println( "servletContext销毁......" ); } @Override public void contextInitialized(ServletContextEvent servletContext) { System.out.println( "servletContext初始化......" ); } } |
创建一个session监听器,监听session的创建和销毁
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package com.example.listener; import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; /** * 实现HttpSessionListener接口,监视session的动态 * @author Administrator * */ @WebListener public class SessionListener implements HttpSessionListener{ @Override public void sessionCreated(HttpSessionEvent session) { System.out.println( "session创建成功......" ); } @Override public void sessionDestroyed(HttpSessionEvent session) { System.out.println( "session销毁......" ); } } |
三、自定义拦截器
步骤:
1、创建自己的拦截器实现HandlerInterceptor接口
2、创建自己的拦截器链,继承WebMvcConfigurerAdapter类,重写addInterceptors方法。
3、实例化自己的拦截器,并加入到拦截器链中。
拦截器一:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
package com.example.Interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class CustomInterceptor implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception exception) throws Exception { //在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作) System.out.println( "3. 整个请求结束之后被调用......CustomInterceptor1......" ); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView view) throws Exception { // 请求处理之后进行调用,但是在视图被渲染之前 System.out.println( "2. 请求处理之后进行调用,但是在视图被渲染之前......CustomInterceptor1......" ); } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception { // 在请求处理之前进行调用 System.out.println( "1. 在请求处理之前进行调用......CustomInterceptor1......" ); // 只有返回true才会继续向下执行,返回false取消当前请求 return true ; } } |
拦截器二:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
package com.example.Interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class CustomInterceptor2 implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception exception) throws Exception { //在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作) System.out.println( "3. 整个请求结束之后被调用......CustomInterceptor2......" ); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView view) throws Exception { // 请求处理之后进行调用,但是在视图被渲染之前 System.out.println( "2. 请求处理之后进行调用,但是在视图被渲染之前......CustomInterceptor2......" ); } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception { // 在请求处理之前进行调用 System.out.println( "1. 在请求处理之前进行调用......CustomInterceptor2......" ); // 只有返回true才会继续向下执行,返回false取消当前请求 return true ; } } |
自定义拦截器链并加入自定义的拦截器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
package com.example.adapter; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import com.example.Interceptor.CustomInterceptor; import com.example.Interceptor.CustomInterceptor2; /** * 继承WebMvcConfigurerAdapter,复写addInterceptors方法 * @author Administrator * */ @Configuration public class WebAdapter extends WebMvcConfigurerAdapter{ @Override public void addInterceptors(InterceptorRegistry registry) { //众多的拦截器组成了一个拦截器链 /** * 主要方法说明: * addPathPatterns 用于添加拦截规则 * excludePathPatterns 用户排除拦截 */ registry.addInterceptor( new CustomInterceptor()).addPathPatterns( "/*" ); registry.addInterceptor( new CustomInterceptor2()).addPathPatterns( "/*" ); super .addInterceptors(registry); } } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/linabc123000/article/details/69245148