使用WebMvcConfigurer接口配置拦截器, 跨域请求会失效, 好像是拦截放行后不会带有跨域信息, 导致失败。下面两个配置可以同时生效。
跨域配置:
@Configuration
@EnableWebMvc
public class CorsConfig implements WebMvcConfigurer {
@Bean
public FilterRegistrationBean someFilterRegistration1() {
//新建过滤器注册类
FilterRegistrationBean registration = new FilterRegistrationBean();
// 添加我们写好的过滤器
registration.setFilter( new SessionFilter());
// 设置过滤器的URL模式
registration.addUrlPatterns("/*");
return registration;
}
}
拦截器配置(使用过滤器Filter接口):
public class SessionFilter implements Filter {
private Logger logger = LoggerFactory.getLogger(getClass());
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
//TODO z 这个获取不到内部报错, 提交改回
// SsoUserVo user = JwtUserUtil.getUserInfo(request);
// if(user != null){
if(true){
filterChain.doFilter(servletRequest, servletResponse);
}else{
logger.warn("未获取到用户信息, 请重新登录!");
response.setCharacterEncoding("UTF-8");
// 给前端返回json
response.setContentType("application/json; charset=utf-8");
PrintWriter out = response.getWriter();
AjaxResultPo po = AjaxResultPo.failed("未获取到用户信息, 请重新登录!");
out.append(JSON.toJSONString(po));
// 要想加一些请求处理可以这样跳转个类或者使用异步
// request.getRequestDispatcher("/filterReturn").forward(request,response);
}
}
}