Spring boot接口跨域问题

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("PUT", "DELETE", "GET", "POST")
                .allowedHeaders("*")
                .exposedHeaders("access-control-allow-headers",
                        "access-control-allow-methods",
                        "access-control-max-age",
                        "access-control-allow-origin",
                        "X-Frame-Options")
                .allowCredentials(false).maxAge(3600);
    }
}

 

### 解决Spring Boot中STOMP的问题 为了在Spring Boot项目中配置STOMP并解决问题,可以采取以下措施: 当`allowCredentials`设置为`true`时,`allowedOrigins`不能包含特殊值`*`,因为这无法被设置到响应头中的`Access-Control-Allow-Origin`字段[^4]。此时应该显式列出允许的源地址或考虑使用`allowedOriginPatterns`替代。 具体实现上,在WebSocket配置类中重写`registerStompEndpoints`方法来指定CORS配置,并调整`HandshakeInterceptor`以适应新的安全需求。以下是具体的代码示例: ```java @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/ws").setAllowedOriginPatterns("*") // 使用 allowedOriginPatterns 替代 allowedOrigins .withSockJS(); } @Override public void configureClientInboundChannel(ChannelRegistration registration) { registration.interceptors(new HandshakeInterceptor() { @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { if (request instanceof ServletServerHttpRequest) { ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request; HttpServletRequest rawRequest = servletRequest.getServletRequest(); String origin = rawRequest.getHeader("Origin"); if ("http://localhost:8080".equals(origin)) { // 显式指明信任的((HttpServletResponse) rawRequest).addHeader("Access-Control-Allow-Credentials", "true"); ((HttpServletResponse) rawRequest).addHeader("Vary", "Origin"); } } return true; } @Override public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {} }); } } ``` 上述代码展示了如何通过修改`allowedOrigins`为`allowedOriginPatterns`以及手动处理握手阶段的安全验证来规避限制。需要注意的是,这里仅作为演示用途,实际开发过程中应当更加严谨地管理受信站点列表,而不是简单地接受所有来源请求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值