在springboot邮件API中启用CORS [英] Enable CORS in springboot mail API

查看:133
本文介绍了在springboot邮件API中启用CORS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可以轻松地发送springboot API和reactjs应用进行邮件提取. 托管在nginx服务器中. React应用程序在本地主机上运行良好,通过电子邮件发送所有okei信息,但是如果我在服务器上运行,则会出现错误.

I have easy mail sending springboot API and reactjs app for fetch. Hosted in nginx server. React app running well localhost, email working everything okei but if I run on a server it gives an error.

我尝试添加其他Nginx服务器设置并添加Springboot @CrossOrigin(origins = "http://xx.xxx.xxx.xxx/"),但到目前为止没有找到任何帮助. 如果我部署到服务器,必须在哪里允许CORS?

I have tried to add different Nginx server settings and add Springboot @CrossOrigin(origins = "http://xx.xxx.xxx.xxx/") but have not found any help so far. Where do I have to allow CORS if I deploy to server?

Nginx服务器默认值:

server {
   listen 80 default_server;
   root /var/www/name/build;
   server_name xx.xxx.xxx.xxx;
   index index.html index.htm;
   location /  {
    }
}

Springboot:

@PostMapping
public void sendFeedback(@RequestBody Feedback feedback,
                         BindingResult bindingResult){
    if(bindingResult.hasErrors()){
        throw new ValidationException("Feedback is not valid");
    }

    // Create a mail sender
    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
    Properties props = mailSender.getJavaMailProperties();
    mailSender.setHost(this.emailCfg.getHost());
    mailSender.setPort(this.emailCfg.getPort());
    mailSender.setUsername(this.emailCfg.getUsername());
    mailSender.setPassword(this.emailCfg.getPassword());

    // Create an email instance
    SimpleMailMessage mailMessage = new SimpleMailMessage();
    mailMessage.setFrom(feedback.getEmail());
    mailMessage.setTo("test@gmail.com");
    mailMessage.setSubject("Testing mail");
    mailMessage.setText(feedback.getFeedback());
    mailSender.send(mailMessage);
}

我拥有的Reactjs代码:

fetch(url,{
    method: 'POST',
    headers:{
        'Content-Type': 'application/json'
    },
    body: JSON.stringify(state)
}).then(response =>{
    console.log(data)
}).catch(error =>{
    console.log(error)
})

输出:

Access to fetch at 'http://xx.xxx.xxx.xxx:8080/feedback-0.0.1-SNAPSHOT' from 
origin 'http://xx.xxx.xxx.xxx' has been blocked by CORS policy: 
Response to preflight request doesn't pass access control check: 
Redirect is not allowed for a preflight request.

推荐答案

添加CORS配置,如下所示:

Add a CORS config as below :

@Configuration
public class CORSConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD");
    }
}

或 取消您的控制器

@CrossOrigin
    @PostMapping
    public void sendFeedback(@RequestBody Feedback feedback,
            BindingResult bindingResult){
        if(bindingResult.hasErrors()){
            throw new ValidationException("Feedback is not valid");
        }

        // Create a mail sender
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        Properties props = mailSender.getJavaMailProperties();
        mailSender.setHost(this.emailCfg.getHost());
        mailSender.setPort(this.emailCfg.getPort());
        mailSender.setUsername(this.emailCfg.getUsername());
        mailSender.setPassword(this.emailCfg.getPassword());

        // Create an email instance
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        mailMessage.setFrom(feedback.getEmail());
        mailMessage.setTo("test@gmail.com");
        mailMessage.setSubject("Testing mail");
        mailMessage.setText(feedback.getFeedback());
        mailSender.send(mailMessage);
    }

这篇关于在springboot邮件API中启用CORS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆