addInterceptors拦截器和addCorsMappings跨域有冲突,不能写在一起,不然会有跨域问题。看以下代码:
@Configuration public class MvcConfig extends WebMvcConfigurerAdapter { // /** // * 跨域-有冲突 // * @param registry // */ // @Override // public void addCorsMappings(CorsRegistry registry) { // registry.addMapping("/**") // .allowedOrigins("*") // .allowCredentials(true) // .allowedHeaders("*") // .allowedMethods("GET", "POST", "DELETE", "PUT") // .maxAge(3600); // super.addCorsMappings(registry); // } @Override public void addInterceptors(InterceptorRegistry registry) { //注册自定义拦截器 {addPathPatterns-配置拦截的路径}、{excludePathPatterns-配置不拦截的路径} registry.addInterceptor(new InterceptorConfig()) .addPathPatterns("/api/user/**") .excludePathPatterns("/api/tourist/**"); super.addInterceptors(registry); } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { //Swagger安全性 registry.addResourceHandler("swagger-ui.html") .addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/"); } /** * jwt过滤器 * @return */ @Bean public FilterRegistrationBean jwtFilter() { final FilterRegistrationBean registrationBean = new FilterRegistrationBean(); JwtFilter filter = new JwtFilter(adminsService()); registrationBean.setFilter(filter); return registrationBean; } @Bean public IAdminsService adminsService() { return new AdminsServiceImpl(); } }
/** * 拦截器 * @author dwen * 2018年5月18日下午8:54:09 */ public class InterceptorConfig implements HandlerInterceptor { private static final Logger Logger = LoggerFactory.getLogger(InterceptorConfig.class); @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { // Logger.info("===============afterCompletion=============="); } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { // Logger.info("===============postHandle=============="); } @Override public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object arg2) throws Exception { Logger.info("===============preHandle=============="); res.setHeader("Content-type", "text/html;charset=UTF-8"); res.setCharacterEncoding("UTF-8"); res.setHeader("Access-Control-Allow-Methods", "POST, GET, DELETE, PUT"); res.setHeader("Access-Control-Max-Age", "3600"); res.setHeader("Access-Control-Allow-Credentials", "true"); res.setHeader("Access-Control-Allow-Headers", "*"); res.setHeader("Access-Control-Allow-Origin", "*"); res.setHeader("Content-Type", "application/json"); String url = req.getRequestURI(); String[] paths = url.split("/");//Get path userId ArrayList<String> pathList = new ArrayList<String>(Arrays.asList(paths)); String userIdStr = pathList.get(pathList.indexOf("user") + 1); int adminId = Integer.parseInt(userIdStr);//用户id String token = req.getHeader("x-access-token"); //【文件上传|导excel】不检查jwt if (url.contains("common/upload") || url.contains("importAutoSubjectExcel") || url.contains("importExaminationPlanExcel") || url.contains("importExaminationScoreExcel") || url.contains("importStudentInfoExcel") || url.contains("importStudyPlanExcel")) { return true; }else{ if (adminId > 0) { //TODO 检查jwt令牌, 如果令牌不合法或者过期 boolean result = JwtUtil.validateToken(token, userIdStr); if (!result) { res.getWriter().print(JSONUtils.returnJSON(null, Result.TOKEN_ERROR.key, Result.TOKEN_ERROR.value)); return false; } } } return true;//返回true继续向下执行,返回false取消当前请求 } }
相关推荐
1、设置跨域访问的路径,允许所有路径跨域访问; 2、设置跨域访问的源,允许所有源; 3、设置请求方法,允许"POST", "GET", "PUT", "OPTIONS", "DELETE"等方式 4、 设置预检间隔时间, 5、允许头部设置 6、 允许发送...
主要介绍了Spring boot跨域设置实例详解,简单介绍了跨域的定义,原因,使用场景及解决方案,具有一定参考价值,需要的朋友可以了解下。
最近在做一个后台管理系统,前端是用时下火热的vue.js,后台是基于springboot...我面临的第一个问题是跨域,浏览器控制台直接报CORS,以我多年开发经验,我果断在后台配置了跨域配置,代码如下: @Configuration publi
spring boot 支持跨域 前台不需要jsonp 请求 正常js即可 spring boot 支持跨域 前台不需要jsonp 请求 正常js即可
- Spring Boot AJAX 跨域,包括 JSONP、Node.js与SpringBoot集成使用反向代理 等。 - springboot-websockets - Spring Boot 使用 Websocket - springboot-webflux - Spring Boot 集成 WebFlux 开发反应式 Web...
Spring Boot 使用 Redis 进行配置 Session 共享(Ajax 跨域) 源码下载。
前后端分离项目,Spring boot作为后端,vue框架实现前端,后端整合swagger3测试工具,jwt实现验证码生成,awt生成图形验证码,整合邮箱验证,使用mybatis-generator自动生成实体类以及mapper,设置有拦截器验证登录...
在 Spring Boot 中,我们可以使用 @EnableWebSocket注解来启用 WebSocket 功能,并使用 WebSocketHandlerRegistry 注册 WebSocket 处理器,指定访问地址和允许跨域请求头。WebSocket 处理器可以继承自 ...
Spring Boot 专栏 基于 Spring Boot 2.X 版本的深度入门教程。 市面上的 Spring Boot 基础入门文章很多,但是深度入门文章却很少。对于很多开发者来说,入门即是其对某个技术栈的最终理解,一方面是开发者“比较懒...
跨域请求解决方案,我们的后端使用Spring Boot。Spring Boot跨域非常简单,只需书写以下代码即可。
本文通过实例代码给大家介绍了Spring Boot实现跨域访问的知识,然后在文中给大家介绍了spring boot 服务器端设置允许跨域访问的方法,感兴趣的朋友一起看看吧
主要介绍了详解Spring Boot 2.0.2+Ajax解决跨域请求的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
12 spring boot Security Jwt 前后端分离跨域登录 代码
解决springboot实现跨域session共享问题,防止sql注入。可以更有效的解决token问题,欢迎下载,有问题可以再评论下方留言,及时解答!!加群:687942640
Spring Boot实战(连接MySQL数据库+使用Spring Data Jpa+配置拦截器及实现跨域访问+整合Redis使用Docker部署Spring Boot项目+使用AOP的正确姿势+整合Mybatis并完成CRUD操作+整合 thymeleaf+整合 MyBatis (XML 版))
主要介绍了Spring Boot设置支持跨域请求过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
本篇文章主要介绍了Java Spring boot 2.0 跨域问题的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Hello Spring Boot 示例、使用热部署、添加REST支持 2018-2018030802:02-ch02-aop 第二章《Spring Boot 基础》学习源码 在 Spring Boot 中使用 AOP 2018-2018030901:03-ch03-mvc 第三章《MVC 框架》学习源码 ...
主要介绍了Spring boot 和Vue开发中CORS跨域问题解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本篇文章主要介绍了Spring boot 总结之跨域处理cors的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧