Spring和React中关于JWT token和CORS的问题

1wnzp6jl  于 2023-11-16  发布在  Spring
关注(0)|答案(1)|浏览(127)

我正在尝试创建一个使用令牌身份验证方法的Sping Boot 应用程序。我想简单一些,所以我使用了这个repo https://www.bezkoder.com/spring-boot-login-example-mysql/作为灵感。没有SQL问题。我的代码与那里的代码完全相同。
当我在POSTMAN中执行请求时,一切都很好,没有任何错误。当我在前端执行请求时,我得到了一个CORS错误,我错过了一个头或一些排序。我通过在项目中添加以下类来修复它。

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry
                .addMapping("/**")
                .allowCredentials(true)
                .allowedHeaders("*")
                .allowedOrigins("http://localhost:3000");
    }
}

字符串
在这一点上,我得到了正确值的set-cookie头,但cookie没有设置。我还在AXIOS中的头请求中添加了withCredentials: true。有人能向我解释一下这是怎么回事,并使用React作为前端来解决这个问题吗?
非常感谢!

dpiehjr4

dpiehjr41#

使用这个,看看它是否工作或不确保创建一个不同的java类,并在您的application.properties写app.client.url=“localhost your url”

@Component

字符串
@Order(Ordered.HIGHEST_PRECEDENCE)public class SimpleCorsFilter实现Filter {

@Value("${app.client.url}")
private String clientAppUrl = "";

public SimpleCorsFilter() {
}

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletResponse response = (HttpServletResponse) res;
    HttpServletRequest request = (HttpServletRequest) req;
    Map<String, String> map = new HashMap<>();
    String originHeader = request.getHeader("origin");
    response.setHeader("Access-Control-Allow-Origin", originHeader);
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "*");

    if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
        response.setStatus(HttpServletResponse.SC_OK);
    } else {
        chain.doFilter(req, res);
    }
}

@Override
public void init(FilterConfig filterConfig) {
}

@Override
public void destroy() {
}


}

相关问题