Log interception achieve SpringBoot

Write your interceptor class

Interceptor classes implemented in two ways ( refer to from https://blog.csdn.net/u013905744/article/details/78335001 ):
1. One is the interface implemented HandlerInterceptor


public class MyInterceptor1 implements HandlerInterceptor {
    //该方法在action执行前执行,可以实现对数据的预处理,
    // 比如:编码、安全控制等。如果方法返回true,则继续执行action。
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws
            Exception {
        System.out.println("MyInterceptor1 action之前执行!!!");
        return true;  //继续执行action
    }
 
    ////该方法在action执行后,生成视图前执行。在这里,我们有机会修改视图层数据。
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView
            modelAndView) throws Exception {
        System.out.println("MyInterceptor1 action执行之后,生成视图之前执行!!");
    }
 
    //最后执行,通常用于释放资源,处理异常。我们可以根据ex是否为空,来进行相关的异常处理。
    //因为我们在平时处理异常时,都是从底层向上抛出异常,最后到了spring框架从而到了这个方法中。
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("MyInterceptor1 最后执行!!!一般用于释放资源!!");
    }
}

2. The other is inherited HandlerInterceptorAdapter:


public class MyInterceptor2  extends HandlerInterceptorAdapter{
 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws
            Exception {
        System.out.println("MyInterceptor2.preHandle()");
        return true;  //继续执行action
    }
}

For I wrote a login interceptor:

@Component
public class LoginInterceptor extends HandlerInterceptorAdapter {

	
	// 请求之前的处理
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		HttpSession session = request.getSession();
		User user = (User) session.getAttribute("user");
		if (user == null) {
			// 没登陆则转到/admin,即会访问登录页面
			request.setAttribute("message", "您还没有登录,请先登录!");
			request.getRequestDispatcher("/admin").forward(request, response);
			return false;
		}
		
		return true;
	}


	
	
}

The difference is that personal feeling inherited interceptor adapter can rewrite the method a little less, for functions require only preHandle methods such as login intercept, use inherited adapter may make the code more concise.

The next class in the configuration disposed to intercept the path

I'm here because it's blog project, only to intercept the admin interface (/ admin), the interface is not required to show the front desk interception, according to actual needs.

@Configuration
public class LoginInterceptorConfiguration implements WebMvcConfigurer {
	
	@Autowired
	private LoginInterceptor loginInterceptor;
	

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(loginInterceptor)
		.addPathPatterns("/admin/**") // 这个是拦截的路径
		.excludePathPatterns("/admin") // 下面两个是不拦截的路径
		.excludePathPatterns("/admin/login");
	}

	
	
	
}

In addition, SSM project may need to configure the xml files to configure intercept path. Here is not demonstrated, we are relatively similar.

Published 14 original articles · won praise 15 · views 522

Guess you like

Origin blog.csdn.net/CodingNO1/article/details/104407802