前言
记录软件开发点滴,积累知识和经验(第三篇)
要做什么?
目标:学会使用拦截器(Interceptor)
怎样去做?
- 写一个拦截器类实现HandlerInterceptor(JwtAuthInterceptor.java)
package com.wyl.interceptors;
import com.wyl.utils.JwtUtil;
import org.apache.commons.lang.StringUtils;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @ClassName JwtAuthInterceptor
* @Description 拦截器
* @Author yilongwu
* @DATE 2019-06-14 14:35
* @Version 1.0.0
**/
public class JwtAuthInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getHeader("X-ToKen");
if (StringUtils.isBlank(token)) {
response.sendRedirect("/VR/login/noPermission");
return false;
}
String name = JwtUtil.validateToken(token);
request.setAttribute("name", name);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
System.out.println(request.getAttribute("name"));
}
}
由于我使用了JWT验证,所以这个拦截器的作用是拦截token.关于JWT可以去了解下官网
- 配置拦截器,将拦截器类注入到springmvc中
package com.wyl.config;
import com.wyl.interceptors.JwtAuthInterceptor;
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;
/**
* @ClassName InterceptorConfigs
* @Description
* @Author yilongwu
* @DATE 2019-06-14 14:55
* @Version 1.0.0
**/
@Configuration
public class InterceptorConfigs implements WebMvcConfigurer {
/**
* 登录访问控制拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
JwtAuthInterceptor jwtAuthInterceptor = new JwtAuthInterceptor();
InterceptorRegistration interceptorRegistration = registry.addInterceptor(jwtAuthInterceptor);
interceptorRegistration.addPathPatterns("/**");
interceptorRegistration.excludePathPatterns("/login/**","/swagger-ui.html","/webjars/**","/swagger-resources/**","/v2/**");
}
}
- 关于三个重写方法的作用
// 这个是在请求到达之前进行拦截
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return true;
}
// 这个是在请求到达后,在渲染视图之前进行拦截
default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
}
// 这个是在渲染完视图后,做一些处理
default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
}
结果怎么样?
u=3419695714,958219617&fm=26&gp=0.jpg