1.拦截器:
新建拦截器:
public class DemoInterceptor implements HandlerInterceptor
{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception
{
String name = request.getParameter("name");
System.out.println("DemoInterceptor..." + name);
return true;
}
}
配置类:
@Configuration
public class MyWebMvcConfig implements WebMvcConfigurer
{
@Override
public void addInterceptors(InterceptorRegistry registry)
{
InterceptorRegistration demoInterceptor = registry.addInterceptor(new DemoInterceptor());
demoInterceptor.addPathPatterns("/*");
// 等同于:registry.addInterceptor(new DemoInterceptor()).addPathPatterns("/*");
}
}
测试:
controller:
@GetMapping("/demo")
public String demo(String name)
{
return "demo";
}
访问:http://localhost:8088/demo?name=zs 结果:
2.过滤器
新建过滤器:
public class DemoFilter implements Filter
{
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
String name = request.getParameter("name");
System.out.println("DemoFilter..." + name);
chain.doFilter(request, response);
}
}
配置类中:
@Bean
public FilterRegistrationBean demoFilterRegist() {
FilterRegistrationBean registration = new FilterRegistrationBean(new DemoFilter());
registration.addUrlPatterns("/*");
return registration;
}
测试结果:
亦可用注解的形式:
在过滤器上加注解:@WebFilter(urlPatterns = "/*")
在启动类上加注解:@ServletComponentScan(basePackages = "com.app.config.filter")
@ServletComponentScan会扫描servlet相关的注解
关于之前文章中提到的在拦截器中验证token:
文章链接:https://blog.csdn.net/qq_34928194/article/details/103879771
拦截器:
@Component
public class TokenInterceptor implements HandlerInterceptor
{
@Autowired
private JwtUtils jwtUtils;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception
{
response.setCharacterEncoding("utf-8");
String token = request.getHeader("token");
if (StringUtils.isEmpty(token))
{
token = request.getHeader("Authorization");
}
if (StringUtils.isEmpty(token))
{
token = request.getParameter("token");
}
HashMap<String, String> result = new HashMap<String, String>();
result.put("message", "token认证失败!");
if (handler instanceof HandlerMethod)
{
if (CommonUtil.isNotEmpty(token))
{
int verify = jwtUtils.verify(token);
if (0 == verify)
{
return true;
}
else if (1 == verify)
{
result.put("message", "token已过期!");
}
}
}
response.getWriter().write(JSONObject.toJSONString(result));
return false;
}
}
配置类:
@Autowired
private TokenInterceptor tokenInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry)
{
String[] excludePath = new String[] {"/api/login"};
registry.addInterceptor(tokenInterceptor).addPathPatterns("/api/**").excludePathPatterns(excludePath);
}
来源:CSDN
作者:自挂东南只
链接:https://blog.csdn.net/qq_34928194/article/details/103906052