一、跨域配置(addCorsMappings
方法)
@Override
public void addCorsMappings(CorsRegistry registry) {
// 允许跨域的配置
registry.addMapping("/**") // 对所有请求路径生效
.allowedOrigins("*") // 允许所有来源(域名)的请求,生产环境建议指定具体域名(如 "https://your-domain.com")
.allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的 HTTP 方法
.allowedHeaders("*") // 允许请求头携带任意字段
.exposedHeaders("*"); // 允许响应头暴露任意字段(前端可通过 JavaScript 访问)
}
作用:
解决浏览器的跨域限制(同源策略),允许其他域名的前端项目访问当前后端接口。例如:
- 前端项目部署在
http://localhost:3000
,后端在http://localhost:8080
,默认会被浏览器阻止请求,通过此配置可放行。 *
是通配符,表示 “所有”,生产环境建议改为具体域名(如https://www.neuedu.com
)以提高安全性。
二、拦截器配置(addInterceptors
方法)
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 注册拦截器(当前代码被注释,实际未生效)
// registry.addInterceptor(loginInterceptor()) // 注册自定义的登录拦截器
// .excludePathPatterns( // 以下路径不拦截(直接放行)
// "/user/login",
// "/user/logout",
// "/wechat/loginByCode",
// "/wechat/reg/**" // "/wechat/reg/" 下的所有子路径(如 /wechat/reg/step1)
// )
// .addPathPatterns("/**"); // 拦截所有其他路径
}
// @Bean
// public LoginInterceptor loginInterceptor() {
// return new LoginInterceptor();
// }
作用:
通过 登录拦截器(LoginInterceptor
)控制用户访问权限,流程如下:
- 注册拦截器:创建
LoginInterceptor
实例(@Bean
方法),并通过registry.addInterceptor()
注册。 - 排除路径:以下路径无需登录即可访问:
/user/login
:登录接口(否则会被拦截导致无法登录)。/user/logout
:登出接口。- 微信相关接口(
/wechat/loginByCode
、/wechat/reg/**
):可能用于第三方登录或注册,需公开访问。
- 拦截路径:
/**
表示除了上述排除路径外,所有其他请求都需要经过拦截器验证(如检查用户是否登录、是否有权限)。