最近遇到了一个问题
想在每次请求后在响应头放一个新token
使用拦截器不能添加响应头
执行顺序
preHandle---->controller方法体----->suport---->beforeBodyWrite---->postHandle
以下代码已添加就是对所有的controller进行拦截
@ControllerAdvice
public class HeaderModifierAdvice implements ResponseBodyAdvice<Object> {
@Autowired
private ShareToken shareToken;
@Autowired
private UserInfoByToken userInfoByToken;
@Override
public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
return true;
}
@Override
public Object beforeBodyWrite(Object o,
MethodParameter methodParameter,
MediaType mediaType,
Class<? extends HttpMessageConverter<?>> aClass,
ServerHttpRequest serverHttpRequest,
ServerHttpResponse serverHttpResponse) {
// 转换对象
HttpServletRequest request = ((ServletServerHttpRequest) serverHttpRequest).getServletRequest();
HttpServletResponse response = ((ServletServerHttpResponse) serverHttpResponse).getServletResponse();
String path = request.getServletPath();
// System.out.println("路径"+path);
if (Objects.equals("/tt/test",path))
return o;
//得到数据后操作
//再次加密返回token
System.out.println(shareToken);
//得到token
JSONObject st = shareToken.getShareToken();
String token = JSON.toJSONString(st);
if (StringUtils.isNotBlank(token)) {
/*刷新token*/
System.out.println("这是controller处理");
response.setHeader("token",token);
}
return o;
}
}