1、编写拦截器
package com.kingteam.session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
* 向spring注入拦截器,实现对session的续租
* @author 秦晓宇
* @date: 2020年10月16日 下午3:37:13
* @record:
*/
@Configuration
public class SessionRenewalAdapter extends WebMvcConfigurerAdapter{
@Autowired SessionRenewal sessionRenewal;
// 增加拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(sessionRenewal);
}
}
2、实现拦截器具体执行方法
package com.kingteam.session;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
/**
* session续租拦截器的实现
* @author 秦晓宇
* @date: 2020年10月16日 下午3:36:55
* @record:
*/
@Component
public class SessionRenewal extends HandlerInterceptorAdapter{
@Autowired
protected KtSessionService ktSessionService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
//System.out.println("SessionRenewal:拦截到请求");
String token = (String) request.getParameter("token");
//System.out.println("SessionRenewal:token = "+token);
ktSessionService.refreshToken(token);
return true;
}
// controller处理完成
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
}
}
3、拦截器使用@Autowired出现NullException的解决办法
不要使用new的方式创建拦截器的实现方法。
@Configuration
public class SessionRenewalAdapter extends WebMvcConfigurerAdapter{
@Autowired SessionRenewal sessionRenewal;
// 增加拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
/*如下是错误的方式*/
registry.addInterceptor(new SessionRenewal())));
/*如下是正确的方式*/
registry.addInterceptor(sessionRenewal);
}
}
4、添加组件扫描
记得在SpacApplication(springboot的启动文件)中添加@ComponentScan