当前位置: 首页 > news >正文

wordpress网站从零政务网站建设和技术维护制度

wordpress网站从零,政务网站建设和技术维护制度,推广普通话手抄报简单又好看内容,常州网站制作优化在Spring Boot 3中#xff0c;解决跨域请求#xff08;CORS#xff0c;Cross-Origin Resource Sharing#xff09;的问题主要有以下几种方式#xff1a; 1. 使用CrossOrigin注解 你可以直接在Controller类或者具体的请求处理方法上使用CrossOrigin注解来允许跨域请求。 …在Spring Boot 3中解决跨域请求CORSCross-Origin Resource Sharing的问题主要有以下几种方式 1. 使用CrossOrigin注解 你可以直接在Controller类或者具体的请求处理方法上使用CrossOrigin注解来允许跨域请求。 RestController RequestMapping(/user) CrossOrigin(origins *) // 允许所有来源的请求跨域 public class UserController { // ... } 在这个例子中CrossOrigin注解被添加到了控制器类上表示这个控制器下的所有方法都允许来自http://example.com的GET和POST请求。你也可以将注解添加到特定的方法上以对该方法应用CORS配置。 2. 全局配置CORS 如果你希望全局配置CORS而不是在每个Controller或方法上单独配置你可以创建一个配置类来实现WebMvcConfigurer接口并重写addCorsMappings方法。 import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; Configuration public class CorsConfig implements WebMvcConfigurer { Override public void addCorsMappings(CorsRegistry registry) { // 添加映射路径 registry.addMapping(/**) .allowedOrigins(*) // 允许哪些域的请求星号代表允许所有 .allowedMethods(POST, GET, PUT, OPTIONS, DELETE) // 允许的方法 .allowedHeaders(*) // 允许的头部设置 .allowCredentials(true) // 是否发送cookie .maxAge(168000); // 预检间隔时间 } } 在这个配置中addMapping(/**)表示对所有的路径都应用CORS配置。allowedOrigins(*)表示允许所有来源的访问这在生产环境中可能不是最佳实践通常你会指定具体的域名。allowedMethods定义了允许的HTTP方法allowedHeaders定义了允许的HTTP头部allowCredentials(true)表示是否允许携带凭证cookies, HTTP认证及客户端SSL证明等maxAge则用于设置预检请求的有效期。 3. 使用Filter实现CORS 你也可以通过实现Filter接口来自定义CORS处理逻辑。 import javax.servlet.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class SimpleCorsFilter implements Filter { Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response (HttpServletResponse) res; response.setHeader(Access-Control-Allow-Origin, http://example.com); response.setHeader(Access-Control-Allow-Methods, POST, GET, OPTIONS, DELETE); response.setHeader(Access-Control-Max-Age, 3600); response.setHeader(Access-Control-Allow-Headers, x-requested-with); chain.doFilter(req, res); } Override public void init(FilterConfig filterConfig) {} Override public void destroy() {} } 然后需要在配置类中注册这个Filter。 import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; Configuration public class FilterConfig { Bean public FilterRegistrationBeanSimpleCorsFilter corsFilter() { FilterRegistrationBeanSimpleCorsFilter registrationBean new FilterRegistrationBean(); registrationBean.setFilter(new SimpleCorsFilter()); registrationBean.addUrlPatterns(/*); return registrationBean; } } 4. 使用拦截器Interceptor 如果需要更复杂的CORS逻辑你可以创建一个拦截器来处理CORS请求。拦截器允许你在请求处理之前或之后添加逻辑。 import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class CorsInterceptor implements HandlerInterceptor { Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { response.setHeader(Access-Control-Allow-Origin, http://example.com); response.setHeader(Access-Control-Allow-Methods, GET, POST, PUT, DELETE); response.setHeader(Access-Control-Allow-Headers, *); // 其他CORS相关的响应头设置 return true; } } 然后你需要在配置类中注册这个拦截器  import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; Configuration public class WebConfig implements WebMvcConfigurer { Autowired private CorsInterceptor corsInterceptor; Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(corsInterceptor).addPathPatterns(/**); } } 当设置allowedHeaders(*)时实际上浏览器会发送实际请求头而不是*。出于安全考虑最好明确指定允许的头部。在生产环境中确保不要过于宽松地配置CORS只允许必要的源和方法。如果你的应用部署在代理服务器后面如Nginx或Apache可能还需要在代理服务器上配置CORS。 5. 响应体Response Body来设置CORS 虽然这种方式不如前面提到的几种方法直接和常用但在某些特殊场景下你可能需要手动控制响应头来实现跨域。 具体实现时你可以在Controller的方法中通过HttpServletResponse对象来设置Access-Control-Allow-Origin等CORS相关的HTTP头。 import javax.servlet.http.HttpServletResponse; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; RestController public class MyController { GetMapping(/data) public String getData(HttpServletResponse response) { // 设置允许跨域的来源 response.setHeader(Access-Control-Allow-Origin, http://example.com); // 设置允许的方法GET, POST, PUT, DELETE等 response.setHeader(Access-Control-Allow-Methods, GET, POST, PUT, DELETE); // 设置允许的头信息 response.setHeader(Access-Control-Allow-Headers, *); // 设置预检请求的有效期 response.setHeader(Access-Control-Max-Age, 3600); // 返回数据 return Data; } } 需要注意的是手动设置响应头的方式相对繁琐且容易遗漏某些必要的头信息导致CORS配置不完整。因此在实际开发中推荐使用前面提到的方法它们更为直接且易于管理。 此外如果你正在使用Spring Security还需要确保Spring Security的配置不会阻止跨域请求的处理。在某些情况下你可能需要在Spring Security的配置中允许特定的CORS请求。 6. 通过自定义ResponseBodyAdvice ResponseBodyAdvice是Spring MVC提供的一个接口允许你在Controller方法返回响应体之前对其进行修改。虽然它本身不是专为CORS设计的但你可以利用它在返回响应之前添加CORS相关的HTTP头。 下面是一个简单的示例展示了如何通过实现ResponseBodyAdvice接口来添加CORS头 import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; import java.lang.reflect.Type; public class CorsResponseBodyAdvice implements ResponseBodyAdviceObject { Override public boolean supports(MethodParameter returnType, Class? extends HttpMessageConverter? converterType) { // 支持所有返回类型 return true; } Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class? extends HttpMessageConverter? selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { // 设置CORS相关的HTTP头 response.getHeaders().set(Access-Control-Allow-Origin, http://example.com); response.getHeaders().set(Access-Control-Allow-Methods, GET, POST, PUT, DELETE); response.getHeaders().set(Access-Control-Allow-Headers, *); // 如果有需要还可以设置其他CORS相关的头比如预检请求的有效期等 // 返回原始的body不做修改 return body; } } 然后你需要在Spring Boot的配置中注册这个ResponseBodyAdvice import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; Configuration public class WebConfig implements WebMvcConfigurer { Override public void configureMessageConverters(ListHttpMessageConverter? converters) { // 注册你的ResponseBodyAdvice converters.forEach(converter - { if (converter instanceof MappingJackson2HttpMessageConverter) { ((MappingJackson2HttpMessageConverter) converter).setResponseBodyAdvice(new CorsResponseBodyAdvice()); } }); } } 这种方法的优点在于它可以全局地应用于所有Controller的响应而无需在每个Controller或方法上单独设置。然而它同样也有一些局限性比如你可能需要手动处理一些CORS的细节并且这种方式不如使用Spring提供的CORS支持那么直接和灵活。 在选择解决方案时应该根据项目的具体需求和团队的偏好来权衡各种方法的优缺点。如果项目中有大量的Controller需要处理跨域请求并且希望有一个统一且全局的解决方案那么使用WebMvcConfigurer或CorsFilter可能是更好的选择。如果只需要在特定的Controller或方法上处理跨域请求那么使用CrossOrigin注解可能更为简单直接。
http://www.zqtcl.cn/news/160323/

相关文章:

  • 做网站侵权腾讯企点打不开
  • iis 网站拒绝显示此网页上海网站建设类岗位
  • 营销型网站建设推荐google关键词
  • 网站上线是前端还是后端来做如何做垂直门户网站
  • 网站建设与管理2018海尔集团网站 建设目的
  • ps做网站大小wordpress调用 php文件
  • php网站忘记后台密码江苏网页制作报价
  • 网站模板 哪个好完备的常州网站推广
  • 衡水淘宝的网站建设濮阳市城乡一体化示范区主任
  • 公司网上注册在哪个网站商洛市商南县城乡建设局网站
  • 怎么才能让网站图文展示大连网站建设设计
  • 俱乐部网站 模板seo产品是什么意思
  • 新手学做网站的教学书建造师查询官网
  • win2012 iis添加网站群辉做网站服务器
  • 网站优化课程培训山东网站备案公司
  • top wang域名做网站好事业单位门户网站建设评价
  • 有什么网站可以做简历网站备案表格
  • 网站开发用什么图片格式最好厦门人才网个人会员
  • 关于网站开发的文献深圳网络推广代运营
  • 网站做app的重要性做静态网站有什么用
  • 一键搭建网站系统教做衣服的网站有哪些
  • 城乡建设部网站施工员证书查询中铁建设集团有限公司招标平台
  • 广东省建设项目安全标准自评网站哪个网站可以免费做简历
  • 带产品展示的个人网站模板购物网站开发背景
  • 哪个域名注册网站好seo广告投放是什么意思
  • 网站建设ydwzjs电子邮箱怎么申请
  • 福建省建住房建设部网站wordpress 算数验证码
  • 东莞企业如何建网站网站正在建设中...为什么护卫神
  • 引流用的电影网站怎么做wordpress浏览速度
  • 微信小程序怎拼做搬家网站东莞建网站公司