java 允许跨域

就在刚刚,朋友问我跨域怎么解决,正好前段时间刚做过,那我就来分享一下吧。

首先创建Httpfilter类,在 Controller 同级下创建

Httpfilter类代码:

package com.Verification.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.http.HttpStatus;

public class Httpfilter implements Filter {

@Override
public void destroy() {
    // TODO 自动生成的方法存根
    
}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    HttpServletResponse response = (HttpServletResponse) servletResponse;
    HttpServletRequest request = (HttpServletRequest) servletRequest;
    // 指定允许其他域名访问
    response.setHeader("Access-Control-Allow-Origin", "*");
    // 响应类型
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, DELETE, OPTIONS, DELETE");
    // 响应头设置
    response.setHeader("Access-Control-Allow-Headers", "Content-Type, x-requested-with, X-Custom-Header, HaiYi-Access-Token");
    if ("OPTIONS".equals(request.getMethod())){
    response.setStatus(HttpStatus.SC_NO_CONTENT);
    }
    filterChain.doFilter(servletRequest, servletResponse);
}

@Override
public void init(FilterConfig arg0) throws ServletException {
    // TODO 自动生成的方法存根
    
}

}

然后:

xml添加:

<filter>
<filter-name>httpfilter</filter-name>
<filter-class>com.Verification.filter.Httpfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>httpfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
最后按ctrl然后鼠标点击xml里的com.Verification.filter.Httpfilter能进入这个页面就算成功。
有其他问题加我QQ:2751499750
希望能帮助你!


<think>好的,我现在需要帮助用户找到Java中实现请求的代码示例,特别是关于CORS的。首先,我要回忆一下用户提到的引用内容。用户提供了四个引用,其中引用1和2提到了设置响应头信息,比如Access-Control-Allow-Origin。引用3和4则提到了使用CORS过滤器或Spring的@CrossOrigin注解,特别是在方法上添加注解的例子。 接下来,我需要确定用户的需求。他们想要具体的代码示例来实现CORS。根据引用,有两种主要方法:一种是手动设置响应头,另一种是使用框架提供的注解或过滤器。对于手动设置,可能需要用到过滤器或者拦截器,在每次请求时添加必要的头信息。而使用Spring框架的话,@CrossOrigin注解或者全局配置会更方便。 然后,我需要确保提供的代码示例正确,并且符合Java的最佳实践。比如,在Spring Boot中,使用@CrossOrigin注解在控制器类或方法上,或者通过WebMvcConfigurer配置全局CORS设置。另外,如果用户使用的是Servlet过滤器,可能需要编写一个自定义的Filter类,并在web.xml或通过注解注册它。 还要注意安全性问题,比如不要将Access-Control-Allow-Origin设置为“*”在生产环境中,而是指定具体的名。同时,其他相关的头信息如Access-Control-Allow-Methods和Access-Control-Allow-Headers也需要正确设置,以允许特定的HTTP方法和头部。 最后,根据用户提供的引用,特别是引用4中的例子,使用@CrossOrigin注解是一个直接的方法,所以应该优先展示这个方法。同时,全局配置和过滤器的示例也需要包括,以满足不同场景的需求。确保代码示例正确,并解释每个部分的作用,帮助用户理解如何实现。</think>在Java中实现请求(CORS)的代码示例如下,根据具体场景可选择不同方式: --- ### 1. **使用`@CrossOrigin`注解(Spring框架)** 在控制器类或方法上直接添加注解,指定允许的来源: ```java @RestController public class DemoController { @CrossOrigin(origins = "http://example.com") // 允许指定来源 @GetMapping("/hello") public String hello() { return "Hello, CORS!"; } } ``` 此方式适用于方法级或类级粒度的控制[^4]。 --- ### 2. **全局配置(Spring Boot)** 通过实现`WebMvcConfigurer`接口配置全局规则: ```java @Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("http://example.com", "http://localhost:8080") .allowedMethods("GET", "POST", "PUT", "DELETE") .allowedHeaders("*") .allowCredentials(true) .maxAge(3600); } } ``` 此配置对所有接口生效,支持多名、指定方法和头部[^3]。 --- ### 3. **手动设置响应头(Servlet过滤器)** 通过自定义过滤器添加CORS头信息: ```java @WebFilter("/*") public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { HttpServletResponse httpResponse = (HttpServletResponse) response; httpResponse.setHeader("Access-Control-Allow-Origin", "http://example.com"); httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); httpResponse.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization"); httpResponse.setHeader("Access-Control-Max-Age", "3600"); chain.doFilter(request, response); } } ``` 此方式适用于非Spring项目或需要更灵活控制的场景[^1][^2]。 --- ### 关键HTTP响应头说明 - `Access-Control-Allow-Origin`: 允许访问的来源(名) - `Access-Control-Allow-Methods`: 允许的HTTP方法 - `Access-Control-Allow-Headers`: 允许的请求头 - `Access-Control-Max-Age`: 预检请求缓存时间(秒) ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值