springboot 前后端分离使用shiro进行权限控制并使用cors进行跨域
本来框架已经搭好了并且持续运行了一段时间前端已经能够拿到后台传过去的数据,cors配置
@Configuration
//@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://192.168.1.141:8080","http://127.0.0.1:8080")
.allowedMethods("GET", "HEAD", "POST","PUT", "DELETE", "OPTIONS")
.allowCredentials(true).maxAge(3600);
}
/*private CorsConfiguration buildConfig(){
CorsConfiguration config = new CorsConfiguration();
config.addAllowedOrigin("http://192.168.1.141:8080");
config.addAllowedOrigin("http://127.0.0.1:8080");
config.addAllowedHeader("*");
config.addAllowedMethod(HttpMethod.GET);
config.addAllowedMethod(HttpMethod.POST);
config.addAllowedMethod(HttpMethod.PUT);
config.addAllowedMethod(HttpMethod.DELETE);
config.addAllowedMethod(HttpMethod.OPTIONS);
return config;
}
@Bean
public CorsFilter corsFilter(){
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
configSource.registerCorsConfiguration("/**", buildConfig());
return new CorsFilter(configSource);
}*/
}
但是今天前端请求菜单接口的时候报302问题(注:今天之前请求菜单接口是可以跨域返回数据的),不明觉厉,弄了很久还是没有弄好。
前端也加了
xhrFields: {
withCredentials: true
},
crossDomain: true,
可是为什么后台突然之间就获取不到cookies了,重点是突然,因为之前都是可以的
cors配置比较简单,我是用的spring+shiro
public class CORSFilter extends OncePerRequestFilter{
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
response.addHeader("Access-Control-Allow-Origin",request.getHeader("Origin"));
response.addHeader("Access-Control-Allow-Credentials","true");
filterChain.doFilter(request,response);
}
}
然后web.xml中配置指向上面的方法指向的类
CORS
com.core.filter.CORSFilter
CORS
/*
就可以了。
你说突然,还是从两个方面找问题,1 是不是之前跨域存在session共享问题 2 其他变化因素导致之前配置丢失
返回数据类型转一下,不返回json格式数据,返回jsonp格式数据
有一个很尴尬的问题,刚刚这个功能又突然好了,真的是突然,如果真的要说执行过什么操作的话那么只有向git上提交了一下代码