目录
概述:
Java里的拦截器是动态拦截方法调用的机制,类似于过滤器,它主要用于拦截用户请求并作出相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。Spring框架中提供,用来动态拦截控制器方法的执行。
使用步骤:
1、定义拦截器、实现HandlerInterceptor接口,并重写其所有方法。
package com.example.Filter;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class LoginCheckInterceptor implements HandlerInterceptor {
@Override //目标资源方法运行前运行,返回true:放行,返回false:不放行
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHander");
return true;
}
@Override//目标资源方法运行后运行
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHander");
}
@Override//视图渲染完毕后运行,最后运行
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterHander");
}
}
2、注册拦截器。
package com.example.config;
import com.example.Filter.LoginCheckInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private LoginCheckInterceptor loginCheckInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
//调用registry中的方法,添加一个拦截器
InterceptorRegistration interceptorRegistration = registry.addInterceptor(loginCheckInterceptor);
//addPathPatterns方法指定拦截路径,/**拦截所有数据
interceptorRegistration.addPathPatterns("/**");
}
}
3、运行项目并展示效果
问题:
问题:创建项目注入bean时一直显示报错提示Inspection 'Incorrect injection point autowiring in Spring bean components' options
Change access modifier
二:分析
问题分析:其实是idea编译的一种bug,可以正常运行,但是呢对于git等等就会有影响,所以我们把这个跟换成警告就可以了
三:解决
解决步骤:点击file—>setting—>editor—>inspections—>找到 incorrect injection point autowiring in Spring bean compoments—>将Error 改成Warnging
最后点击apply应用一下
稍等几秒就可以了,就解决啦。
拦截器-—拦截路径
拦截器可以根据需求,配置不同的拦截路径:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginCheckInterceptor).addPathPatterns("/**").excludePathPatterns();
// 需要拦截哪些资源 不需要拦截哪些资源
}
拦截路径 | 含义 | 举例 |
/* | 一级路径 | 能匹配到/demo,/emp,不能匹配到/demo/1 |
/** | 任意级路径 | 能匹配/demo,/emp,/demo/1 |
/demo/* | /demo下的一级路径 | 能匹配到/demo/1,不能匹配到/demo/1/2,/demo |
/demo/** | /demo下的任意级路径 | 能匹配到/demo,/demo/1/2,不能匹配到/emo/ |