商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Java中SSM框架解决跨域请求问题

Java中SSM框架解决跨域请求问题

  发布于2026-07-11 阅读(0)

扫一扫,手机访问

方法一

@CrossOrigin注解的方式,只作用在当前Controller层面

如果你只想要某个Controller或某个方法允许跨域访问,直接在类或方法前面加上@CrossOrigin注解就行。加在类上,整个Controller都放行;加在方法上,只有那一个方法支持跨域。最小配置原则,够用就好。

@CrossOrigin // 允许所有ip跨域
@CrossOrigin(origins = "192.168.0.1") //只允许指定ip跨域

Ja va中SSM框架解决跨域请求问题

Ja va中SSM框架解决跨域请求问题

方法二

在SpringMVC配置文件spring-context.xml中统一配置跨域

如果项目里Controller比较多,一个一个加注解也挺烦的。不如直接在SpringMVC的全局配置文件里做一次声明,所有请求的跨域策略都由这里管。



	 
	

Ja va中SSM框架解决跨域请求问题

方法三

使用cors-filter包配置跨域

如果你的项目不是纯Spring MVC,或者想跟Spring解耦,可以借助第三方库cors-filter,通过Filter的方式统一处理。操作分两步:

1、先在pom.xml里加上依赖:



	com.thetransactioncompany
	cors-filter
	2.5

2、然后在web.xml中注册这个Filter,并设置相关初始化参数:



	CORS
	com.thetransactioncompany.cors.CORSFilter
	
		cors.allowOrigin
		*
	
	
		cors.supportedMethods
		 
		GET, POST, HEAD, PUT, DELETE
	
	
		cors.supportedHeaders
		Accept, Origin, X-Requested-With, Content-Type, Last-Modified
	
	
		cors.exposedHeaders
		Set-Cookie
	
	
		cors.supportsCredentials
		true
	


	CORS
	/*

方法四

自己动手写一个CrossingFilter跨域过滤器

第三方库虽然省事,但有时候项目对依赖管理有严格要求,或者你想完全控制跨域逻辑。那就自己实现一个Filter,核心就是实现ja vax.servlet.Filter接口。下面是一个完整的实现示例:

1、编写CrossingFilter类:

package com.pmsapi.filter;
import ja va.io.IOException;
import ja vax.servlet.Filter;
import ja vax.servlet.FilterChain;
import ja vax.servlet.FilterConfig;
import ja vax.servlet.ServletException;
import ja vax.servlet.ServletRequest;
import ja vax.servlet.ServletResponse;
import ja vax.servlet.http.HttpServletRequest;
import ja vax.servlet.http.HttpServletResponse;
public class CrossingFilter implements Filter {
	private boolean isCross = false;
	@Override
	public void destroy() {
		isCross = false;
	}
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		if (isCross) {
			HttpServletRequest httpServletRequest = (HttpServletRequest) request;
			HttpServletResponse httpServletResponse = (HttpServletResponse) response;
			System.out.println("拦截请求: " + httpServletRequest.getServletPath());
			httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
			// httpServletResponse.setHeader("Access-Control-Allow-Methods", "*"); // 表示所有请求都有效
			httpServletResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
			httpServletResponse.setHeader("Access-Control-Max-Age", "0");
			httpServletResponse.setHeader("Access-Control-Allow-Headers",
					"Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token");
			httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true");
			httpServletResponse.setHeader("XDomainRequestAllowed", "1");
		}
		chain.doFilter(request, response);
	}
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		String isCrossStr = filterConfig.getInitParameter("IsCross");
		isCross = isCrossStr.equals("true") ? true : false;
		System.out.println("跨域开启状态:" + isCrossStr);
	}
}

2、在web.xml中注册这个自定义Filter:



	CrossingFilter
	com.pmsapi.filter.CrossingFilter
	
		IsCross
		true
	


	CrossingFilter
	/*

总结

从实践来看,这四种方案基本覆盖了SSM项目中常见的跨域需求。注解最轻量,配置文件和Filter更适合统一管理,而自定义Filter则提供了最大灵活性。实际选哪一种,取决于项目的技术栈和架构要求。希望这些整理能帮大家在实际开发中少走弯路。

本文转载于:https://www.jb51.net/program/367224jky.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注