`
wenxin2009
  • 浏览: 320471 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring Boot跨域

 
阅读更多

 

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取消当前请求
	}

}

 

 

  • 大小: 15.8 KB
分享到:
评论

相关推荐

    spring boot跨域访问服务配置程序

    1、设置跨域访问的路径,允许所有路径跨域访问; 2、设置跨域访问的源,允许所有源; 3、设置请求方法,允许"POST", "GET", "PUT", "OPTIONS", "DELETE"等方式 4、 设置预检间隔时间, 5、允许头部设置 6、 允许发送...

    Spring boot跨域设置实例详解

    Spring Boot 跨域设置实例详解 跨域设置是指从一个域名的网页去请求另一个域名的资源。这种情况下,浏览器默认不允许跨域访问,包括我们平时ajax也是限制跨域访问的。产生跨域访问的情况主要是因为请求的发起者与...

    vue+springboot前后端分离实现单点登录跨域问题解决方法

    最近在做一个后台管理系统,前端是用时下火热的vue.js,后台是基于springboot...我面临的第一个问题是跨域,浏览器控制台直接报CORS,以我多年开发经验,我果断在后台配置了跨域配置,代码如下: @Configuration publi

    spring boot 支持js跨域请求

    spring boot 支持跨域 前台不需要jsonp 请求 正常js即可 spring boot 支持跨域 前台不需要jsonp 请求 正常js即可

    Spring boot 和Vue开发中CORS跨域问题解决

    本文旨在详细阐述CORS跨域问题的背景、解决方法以及如何在Spring Boot和Vue.js的结合使用场景下处理跨域问题。 ### CORS跨域问题背景 CORS全称是Cross-Origin Resource Sharing,即跨源资源共享。这个概念是W3C的...

    spring boot面试题及答案.docx

    Spring Boot推荐使用CORS(Cross-Origin Resource Sharing,跨源资源共享)来解决跨域问题。 - **CORS实现方式**:在Spring Boot中,可以通过`@CrossOrigin`注解来配置CORS。例如,可以在控制器类或具体的方法上...

    Spring Boot Redis Session 共享(Ajax 跨域)

    本教程将详细讲解如何在Spring Boot项目中利用Redis来存储和共享Session,并解决Ajax跨域问题。 首先,我们需要理解Spring Boot中的Session管理。默认情况下,Spring Boot使用内存中的HttpSession来存储用户会话...

    解决springboot实现跨域session共享问题

    本文将详细讲解如何在Spring Boot应用中解决跨域session共享的问题,并探讨防止SQL注入的相关策略。 首先,让我们理解什么是跨域。跨域是指由于浏览器的同源策略限制,不同域名、协议或端口之间的页面无法直接通信...

    spring boot整合vue

    标题 "spring boot 整合 vue" 指的是在Java后端使用Spring Boot框架与前端Vue.js进行集成,创建一个完整的Web应用。Spring Boot简化了Java应用的搭建和配置过程,而Vue.js则是一个轻量级且功能强大的前端MVVM(Model...

    Spring Boot技术栈博客企业前后端2018

    - **跨域资源共享(CORS)**:Spring Boot可以通过简单的配置支持CORS,解决前端跨域请求的问题。 - **安全认证**:通过Spring Security等工具实现前后端之间的安全认证。 ### 结语 虽然给定的部分内容无法直接提取...

    spring boot的demo.zip

    Spring Boot 是一个基于 Spring 框架的快速开发工具,它简化了创建独立、生产级的 Java 应用程序的过程。在这个"spring boot的demo.zip"压缩包中,你将找到一个示例项目,用于演示如何在实际开发中运用 Spring Boot ...

    java之Spring Boot快速帮助

    Boot的深度解析+SpringBoot监听器+SpringBoot注解篇+AOP篇+深入实践SpringBoot2.0Spring-Boot整合工具类+SpringBoot整合二维码+SpringBoot整合生成图片验证码Spring-Boot统一跨域配置+Spring-Boot整合Actuarot监控+...

    Java Spring Boot面试题

    Spring Boot 面试题知识点总结 本文总结了 Spring Boot 面试题中的知识点,涵盖了概述、配置、安全、监视器、整合第三方项目和其他几个方面。 概述 Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站...

    Spring boot 总结之跨域处理cors的方法

    Spring Boot 跨域处理 CORS 的方法 Spring Boot 是一个基于 Java 的框架,用于快速构建生产级别的应用程序。然而,在构建前后端分离的项目时,我们经常会遇到跨域问题。跨域问题是指当我们的页面和接口在不同域名下...

    spring boot 集成 shiro

    **Spring Boot 集成 Shiro 深度解析** Spring Boot 是一款基于 Spring 的轻量级框架,它简化了 Spring 应用的初始搭建以及开发过程。而 Apache Shiro 是一个强大且易用的 Java 安全框架,提供了认证、授权、加密和...

    如何使用Java Spring Boot执行RAG架构GenAI项目的示例.zip

    在本示例中,我们将探讨如何使用Java Spring Boot框架来实现一个基于RAG(Red-Amber-Green)架构的GenAI项目。RAG是一种广泛应用于项目管理、风险评估和KPI跟踪的颜色编码系统,其中Red代表高风险或问题,Amber表示...

    spring boot+websocket

    在本文中,我们将深入探讨如何在Spring Boot框架中集成WebSocket技术,以便实现实时通信功能。结合jQuery在前端的应用,可以构建出一个高效、实时的Web应用。首先,让我们了解Spring Boot和WebSocket的基本概念。 ...

    Spring boot+vue3+element plus实现后台管理系统

    前后端分离项目,Spring boot作为后端,vue框架实现前端,后端整合swagger3测试工具,jwt实现验证码生成,awt生成图形验证码,整合邮箱验证,使用mybatis-generator自动生成实体类以及mapper,设置有拦截器验证登录...

    详解Spring Boot 2.0.2+Ajax解决跨域请求的问题

    "详解Spring Boot 2.0.2+Ajax解决跨域请求的问题" 知识点1:什么是跨域请求? 跨域请求是指浏览器从一个域名下的网页去请求另一个域名下的资源时,会出现的安全限制问题。该限制是因为浏览器的同源策略(Same-...

    Spring Boot(五)之跨域、自定义查询及分页

    Spring Boot 跨域、自定义查询及分页 Spring Boot 中的跨域问题是一个非常重要的主题,跨域请求是指从本身站点请求不同域名或端口的服务所提供的资源时,就会发起跨域请求。例如最常见的,我们很多的 CSS 样式文件...

Global site tag (gtag.js) - Google Analytics