Springboot 拦截器

1.介绍

面向切面编程——AOP 的具体实现

你可以使用 Interceptor 来执行某些任务,例如在 Controller 处理请求之前编写日志,添加或更新配置……
在 Spring中,当请求发送到 Controller 时,在被Controller处理之前,它必须经过 Interceptors(0或多个)。
Spring Interceptor是一个非常类似于Servlet Filter 的概念 。

单点登录使用

2.interceptor作用

日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算 PV(Page View)等;
权限检查:如登录检测,进入处理器检测是否登录;
性能监控:通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间。(反向代理,如 Apache 也可以自动记录)
通用行为:读取 Cookie 得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取 Locale、Theme 信息等,只要是多个处理器都需要的即可使用拦截器实现。

3.自定义interceptor

重写prehandle,方法在请求处理之前被调用

public class FamaInterceptor implements HandlerInterceptor {

    private SpringSSOInterceptor ssoInterceptor;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        boolean ok = ssoInterceptor.preHandle(request, response, handler);
        if (ok){
            return true;
        }
        response.setStatus(521);
        return false;
    }


    public SpringSSOInterceptor getSsoInterceptor() {
        return ssoInterceptor;
    }

    public void setSsoInterceptor(SpringSSOInterceptor ssoInterceptor) {
        this.ssoInterceptor = ssoInterceptor;
    }
}

4.配置拦截器使他生效

@Configurationpublic class WebConfig implements WebMvcConfigurer {    
@Override    
public void addInterceptors(InterceptorRegistry registry) {
				registry.addInterceptor(new FamaInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/oldLogin");
											}
}
原文地址:https://www.cnblogs.com/PythonOrg/p/14836260.html