欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

Java

當(dāng)前位置:主頁 > 軟件編程 > Java >

springboot跨域問題解決方案

來源:本站原創(chuàng)|時間:2020-01-10|欄目:Java|點擊: 次

這篇文章主要介紹了springboot跨域問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

springboot中的跨域問題,如果不注意的話,容易造成錯誤,本次springboot版本為2.13

前端錯誤信息:

Access to XMLHttpRequest at 'http://localhost:8080/user/loginOn' from origin 'http://localhost:8082' has been blocked by CORS policy:
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

第一種:是在每個Controller里,加上注解:@CrossOrigin

import javax.validation.Valid;
@CrossOrigin
@RestController
@RequestMapping("/user")
public class UserController{

也可以在方法上加上,比如這樣,這樣針對具體的方法

 @CrossOrigin
  @ApiOperation(value = "用戶登錄",notes = "")
  @PostMapping("/loginOn")
  public ResponseMessage loginOn(@RequestBody @Valid UserReq userReq){

每一個Controller這樣寫也是很麻煩。

第二種:是實現(xiàn)WebMvcConfigurer接口,在接口中進行跨域支持

以前可以繼承WebMvcConfigurerAdapter,springboot2.x版本已經(jīng)將其@Deprecated

我們直接實現(xiàn)接口:

@Configuration
public class WebConfig implements WebMvcConfigurer {

  /**
   * 跨域支持
   * @param registry
   */
  @Override
  public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")
        .allowedOrigins("*")
        .allowCredentials(true)
        .allowedMethods("GET", "POST", "DELETE", "PUT")
        .maxAge(3600 * 24);
  }

但使用這種方法,我今天遇到一個坑,我準備在攔截器里面對用戶的請求進行攔截

@Component
public class RequestInterceptor implements HandlerInterceptor {
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    Object loginUser = request.getSession().getAttribute("token");
    if(loginUser == null){
        //自定義的異常類,這里拋出異常,交給全局異常捕捉類處理
      throw new ServiceException("沒有權(quán)限,請先登錄!");
    }else{
      return true;
    }
  }

  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

  }

  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

  }
}

全局異常捕捉類:

@RestControllerAdvice
public class GlobleExceptionHandler {
  @ExceptionHandler(value = ServiceException.class)
  public ResponseMessage caughtException(ServiceException e){

    return new ResponseMessage(e.getMsg());
  }
}

ResponseMessage 是自定義的統(tǒng)一的響應(yīng)信息類:

ResponseMessage

@Data
public class ResponseMessage {
  private Integer Code;
  private String msg;
  private Integer count;
  private Object data;

  public ResponseMessage(Object data) {
    this.data = data;
  }

  public ResponseMessage(String msg) {
    this.msg = msg;
  }

  public ResponseMessage(Integer code, String msg) {
    Code = code;
    this.msg = msg;
  }

  public ResponseMessage(Integer code, String msg, Integer count) {
    Code = code;
    this.msg = msg;
    this.count = count;
  }

  public ResponseMessage(Integer code, String msg, Integer count, Object data) {
    Code = code;
    this.msg = msg;
    this.count = count;
    this.data = data;
  }

  public static ResponseMessage success(String msg){
    return new ResponseMessage(200,msg);
  }

  public static ResponseMessage fail(Integer code,String msg){
    return new ResponseMessage(code,msg);
  }
}

通過這樣的處理發(fā)現(xiàn),前端一直報跨域異常問題,這時候有了第三種方法

第三種:使用CorsFilter過濾器:

寫一個MyCorsConfig 配置類

@Configuration
public class MyCorsConfig {

  @Bean
  public CorsFilter corsFilter() {

    CorsConfiguration corsConfiguration = new CorsConfiguration();
    corsConfiguration.addAllowedOrigin("*");
    corsConfiguration.addAllowedHeader("*");
    corsConfiguration.addAllowedMethod("*");
    corsConfiguration.setAllowCredentials(true);
    corsConfiguration.setMaxAge(3600L);

    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", corsConfiguration);
    FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
    //設(shè)置過濾器的順序
    bean.setOrder(0);
    return new CorsFilter(source);
  }
}

最終解決本次demo的跨域問題。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。

上一篇:Spring如何在一個事務(wù)中開啟另一個事務(wù)

欄    目:Java

下一篇:Java如何基于ProcessBuilder類調(diào)用外部程序

本文標題:springboot跨域問題解決方案

本文地址:http://mengdiqiu.com.cn/a1/Java/8768.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有