Inhaltsverzeichnis
Die domänenübergreifende Filterkonfiguration von SpringBoot ermöglicht domänenübergreifenden Zugriff.
Domänenübergreifende Anforderungen
Problemhintergrund
2. 非简单请求
三、SpringBoot设置CORS
Heim Java javaLernprogramm So konfigurieren Sie domänenübergreifende Filter in SpringBoot, um domänenübergreifenden Zugriff zu ermöglichen

So konfigurieren Sie domänenübergreifende Filter in SpringBoot, um domänenübergreifenden Zugriff zu ermöglichen

May 10, 2023 pm 03:52 PM
springboot

Die domänenübergreifende Filterkonfiguration von SpringBoot ermöglicht domänenübergreifenden Zugriff.

Domänenübergreifende Anforderungen

Wenn eine Ressource eine Ressource von einer anderen Domäne oder einem anderen Port als dem Server anfordert, auf dem sich die Ressource selbst befindet, initiiert die Ressource eine domänenübergreifende HTTP-Anfrage .

Aus Sicherheitsgründen schränken Browser ursprungsübergreifende HTTP-Anfragen ein, die aus Skripten heraus initiiert werden. Beispielsweise folgen XMLHttpRequest und Fetch API derselben Ursprungsrichtlinie. Dies bedeutet, dass Webanwendungen, die diese APIs verwenden, HTTP-Ressourcen nur von derselben Domäne anfordern können, in der die Anwendung geladen wird, es sei denn, CORS-Header werden verwendet.

Problemhintergrund

Wenn das Front-End das Problem „Access-Control-Allow-Origin“ anzeigt

XMLHttpRequest kann http://xxxxxxxxx/ nicht laden. Es ist kein „Access-Control-Allow-Origin“-Header vorhanden Angeforderte Ressource. Origin „null“ ist daher kein Zugriff gestattet.

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.springframework.stereotype.Component;
@Component  
public class CorsFilter implements Filter {  
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {  
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;  
        response.setHeader("Access-Control-Allow-Origin", "*");  
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT, GET");  
        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() {}  
}
Nach dem Login kopieren
Verbesserung der domänenübergreifenden Funktion

Wenn Sie die domänenübergreifende Adresse anzeigen müssen, können Sie zur Fehlerbehebung auch die Druckanweisung für die Zugriffsquelle hinzufügen

String curOrigin = request.getHeader("Origin");
System.out.println("###跨域过滤器->当前访问来源->"+curOrigin+"###");
Nach dem Login kopieren

Wenn Sie domänenübergreifende Berechtigungen benötigen, können Sie die Quelle ermitteln

String curOrigin = request.getHeader("Origin");
System.out.println("###跨域过滤器->当前访问来源->"+curOrigin+"###");  
if(curOrigin.indexOf("127.0.0.1:8080")>-1){
    response.setHeader("Access-Control-Allow-Origin", "*");
}
Nach dem Login kopieren

SpringBoot Cross-Domain-Einstellungen (CORS)

1. Was ist Cross-Domain?

Wenn das Protokoll, der Domänenname und der Port der Anforderungs-URL unterschiedlich sind, handelt es sich um Cross-Domain. Aufgrund von Einschränkungen der Same-Origin-Richtlinie des Browsers treten domänenübergreifende Probleme auf.

Gleicher Ursprung: Das Protokoll, der Domänenname und der Port der Anforderungs-URL sind gleich, was bedeutet, dass es sich um denselben Ursprung (dieselbe Domäne) handelt.

  • Same-Origin-Policy: Same-Origin-Policy (Same-Origin-Policy) ist eine Konvention. Sie ist die wichtigste und grundlegendste Sicherheitsfunktion des Browsers. Die Same-Origin-Richtlinie verhindert die Interaktion von Inhalten nicht-ursprünglicher Herkunft (der gleichen Domain).

  • Restriktionen der gleichorientierten Richtlinie:

abgelesen zum Lesen von Cookies, Lokalstor- und IndexedDB von nicht originalen Webseiten. Nicht-originale Webseiten Adresse zum Senden einer AJAX-Anfrage

  • Die Same-Origin-Richtlinie des Browsers schränkt domänenübergreifende Anfragen ein. Es gibt im Allgemeinen zwei Möglichkeiten zur Einschränkung:

  • Der Browser schränkt domänenübergreifende Anfragen ein;
  • Domainübergreifende Anfragen können normal initiiert werden, aber das zurückgegebene Ergebnis wurde vom Browser abgefangen.

Im Allgemeinen beschränken Browser domänenübergreifende Anforderungen auf die zweite Art und Weise. Dies bedeutet, dass die Anforderung den Server erreicht hat und möglicherweise die Daten in der Datenbank bearbeitet hat, das zurückgegebene Ergebnis jedoch vom Browser abgefangen wurde Das Rückgabeergebnis kann nicht abgerufen werden. Dies ist eine fehlgeschlagene Anfrage, die jedoch Auswirkungen auf die Daten in der Datenbank haben kann.

Um dies zu verhindern, verlangt die Spezifikation, dass der Browser für diese HTTP-Anfragemethode, die Nebenwirkungen auf Serverdaten haben kann, zunächst die OPTIONS-Methode verwenden muss, um eine Preflight-Anfrage zu initiieren, um zu erfahren, ob der Server die Cross- Domain-Anfrage: Wenn erlaubt, wird eine echte Anfrage mit Daten gesendet; wenn nicht, wird das Senden einer echten Anfrage mit Daten verhindert.
  • 2. Cross-Domain Resource Sharing (CORS)

    Um das Problem zu lösen, dass nicht originale Inhalte nicht interagieren können, lautet die aktuelle Mainstream-Lösung: CORS (Cross-Domain Resource Sharing).
  • Cross-origin Resource Sharing (CORS), das die Einschränkung durchbricht, dass eine von einem Browser gestellte Anfrage nur dann Daten vom Server erhalten kann, wenn sie vom gleichen Ursprung stammen.

    CORS stimmt zu, dass der Server und der Browser die domänenübergreifende gemeinsame Nutzung von Ressourcen über einige zusätzliche HTTP-Header-Informationen zusätzlich zum HTTP-Protokoll aushandeln. Sowohl die Serverseite als auch der Browser müssen den Anforderungen der Spezifikation entsprechen.
CORS unterteilt domänenübergreifende HTTP-Anfragen in zwei Kategorien: einfache Anfragen und nicht einfache Anfragen. Verschiedene Anfragen verhandeln die domänenübergreifende Ressourcenfreigabe gemäß unterschiedlichen Richtlinien.

1. Einfache Anfrage

Bedingungen, die für einfache domänenübergreifende Anfragen erfüllt sein müssen:

1 Die Anfragemethode ist GET, HEAD oder POST (für POST muss der Wert von Content-Type application/x- sein. www-form-urlencoded, Ein Wert in multipart/form-data, text/plain);

2 Es gibt keinen benutzerdefinierten HTTP-Anfrageheader in der Anfrage.

HTTP-Header können nur die folgenden Felder enthalten:

Accept

Accept-Language

Content-Language</code ><p></p><ul class=" list-paddingleft-2"><li><code>DPR

Accept

  • Accept-Language

  • Content-Language

  • DPR

  • Downlink

  • Save-Data

  • Viewport-Width

  • Width

  • Content-Type

  • Downlink

    Save-Data

    Viewport-Width< /code></p><p></p><p><code>Width

    🎜🎜🎜Content-Type🎜🎜🎜🎜🎜Wenn die beiden oben genannten Punkte erfüllt sind, handelt es sich um eine einfache domänenübergreifende Anfrage . 🎜🎜🎜Für einfache domänenübergreifende Anfragen ist die Verarbeitungsmethode wie folgt: 🎜🎜1 Der Browser muss lediglich Origin zum HTTP-Anfrageheader hinzufügen, die Domäne eingeben, in der sich das JavaScript-Skript befindet, und Ressourcen anfordern von Servern in anderen Domänen. 🎜
    Origin: http://www.joker.com
    Nach dem Login kopieren
    🎜Das Feld „Ursprung“ wird verwendet, um anzugeben, von welcher Quelle diese Anfrage stammt (Protokoll + Domänenname + Port). Der Server entscheidet anhand dieses Werts, ob er der Anfrage zustimmt. 🎜🎜2. Nachdem der Server eine einfache domänenübergreifende Anfrage erhält, fügt er entsprechend der Ressourcenberechtigungskonfiguration Access-Control-Allow-Origin zum Antwortheader hinzu. 🎜

    如果Origin指定的源,不在许可范围内,服务器会返回一个正常的HTTP回应。 但这个响应头信息没有包含Access-Control-Allow-Origin字段,浏览器就知道该域名不在许可范围内。

    如果Origin指定的域名在许可范围内,服务器返回的响应,会多出几个头信息字段:

    Access-Control-Allow-Origin: http://www.joker.com
    Access-Control-Allow-Credentials: true
    Access-Control-Expose-Headers: My-Token
    Nach dem Login kopieren
    • Access-Control-Allow-Origin:该字段是必须的。它的值要么是请求时Origin字段的值,要么是一个*值,表示接受任意域名的请求。

    • Access-Control-Allow-Credentials: 该字段是可选的。它的值是一个布尔值,表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求之中。设为true,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器。这个值也只能设为true,如果服务器不要浏览器发送Cookie,删除该字段即可。

    • Access-Control-Expose-Headers:该字段是可选的。CORS请求时,XMLHttpRequest对象的getResponseHeader()方法只能拿到6个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必须在Access-Control-Expose-Headers里面指定。

    3.浏览器收到响应后,通过获取响应头中的Access-Control-Allow-Origin字段,来判断如果当前域已经得到授权,则将结果返回给JavaScript。否则浏览器忽略此次响应。

    2. 非简单请求

    非简单跨域请求需满足的条件:

    • 除GET、HEAD和POST(Content-Type的值是:application/x-www-form-urlencoded、multipart/form-data、text/plain中的一个值)以外的其他HTTP方法

    • 如:PUT、DELETE、TRACE、PATCH、POST(Content-Type的值是:application/json)。

    • 请求中有自定义HTTP头部。

    以上两点只要至少满足其中一点就是非简单跨域请求。

    对于非简单跨域请求,处理方式如下:

    1.浏览器在发送真实HTTP请求之前先发送一个OPTIONS的预检请求,检测服务器端是否支持真实请求进行跨域资源访问。

    真实请求的信息在OPTIONS请求中通过请求头中的Access-Control-Request-Method和Access-Control-Request-Headers字段来描述。此外与简单跨域请求一样,请求头中也会有Origin字段。

    Origin: http://www.joker.com
    Access-Control-Request-Method: PUT
    Access-Control-Request-Headers: Header1,Header2
    Nach dem Login kopieren
    • Origin:必须字段,用于指定请求源。

    • Access-Control-Request-Method:必须字段,用于描述真实请求的方法(PUT、DELETE等)。

    • Access-Control-Request-Headers:指定真实请求会额外发送的请求头字段信息。

    2.服务器端接到预检请求后,会检查了Origin、Access-Control-Request-Method和Access-Control-Request-Headers字段,检验是否允许跨源请求。

    如果不允许该跨域请求,会返回一个正常的HTTP回应,但这个响应头信息没有包含Access-Control-Allow-Origin字段,浏览器就知道该域名不在许可范围内。

    如果允许该跨域请求,就会在响应头中放入Access-Control-Allow-Origin、Access-Control-Allow-Methods和Access-Control-Allow-Headers,分别表示允许跨域资源请求的域、请求方法和请求头。此外,服务器端还可以在响应头中放入Access-Control-Max-Age,允许浏览器在指定时间内,无需再发送预检请求进行协商,直接用本次协商结果即可。

    Access-Control-Allow-Origin: http://www.joker.com
    Access-Control-Allow-Methods: GET, POST, PUT
    Access-Control-Allow-Headers: Header1,Header2,Header3
    Access-Control-Allow-Credentials: true
    Access-Control-Max-Age: 1728000
    Nach dem Login kopieren
    • Access-Control-Allow-Methods:该字段必需,它的值是逗号分隔的一个字符串,表明服务器支持的所有跨域请求的方法。注意,返回的是所有支持的方法,而不单是浏览器请求的那个方法。这是为了避免多次"预检"请求。

    • Access-Control-Allow-Headers:如果浏览器请求包括Access-Control-Request-Headers字段,则Access-Control-Allow-Headers字段是必需的。它也是一个逗号分隔的字符串,表明服务器支持的所有头信息字段,不限于浏览器在"预检"中请求的字段。

    • Access-Control-Allow-Credentials: 该字段与简单请求时的含义相同。它的值是一个布尔值,表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求之中。设为true,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器。这个值也只能设为true,如果服务器不要浏览器发送Cookie,删除该字段即可。

    • Access-Control-Max-Age: 该字段可选,用来指定本次预检请求的有效期,单位为秒。上面结果中,有效期是20天(1728000秒),即允许缓存该条回应1728000秒(即20天),在此期间,不用发出另一条预检请求。

    浏览器根据OPTIONS请求返回的结果来决定是否继续发送真实的请求进行跨域资源访问。这个过程对真实请求的调用者来说是透明的。

    三、SpringBoot设置CORS

    SpringBoot设置CORS的的本质都是通过设置响应头信息来告诉前端该请求是否支持跨域。

    SpringBoot设置CORS的方式主要有以下三种。

    1. 配置过滤器CorsFilter

    @Configuration
    public class CorsConfig {
        
        @Bean
        CorsFilter corsFilter() {
            CorsConfiguration configuration = new CorsConfiguration();
            configuration.setAllowedOrigins(Arrays.asList("*"));
            configuration.setAllowedMethods(Arrays.asList("*"));
            configuration.setAllowedHeaders(Arrays.asList("*"));
            configuration.setAllowCredentials(true);
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            source.registerCorsConfiguration("/**", configuration);
            return new CorsFilter(source);
        }
    }
    Nach dem Login kopieren

    2. 实现接口WebMvcConfigurer

    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
        
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedOrigins("*")
                    .allowedHeaders("*")
                    .allowedMethods("*")
                    .allowCredentials(true);
        }
    }
    Nach dem Login kopieren

    3. 使用注解@CrossOrigin

    @CrossOrigin注解可以用在类或者方法上

    用在控制器类上,表示 该类的所有方法都允许跨域

    @RestController
    @CrossOrigin
    public class TestController {
        
        @GetMapping("test")
        public String test() {
            return "success";
        }
    }
    Nach dem Login kopieren

    用在控制器方法上,表示该方法都允许跨域

    @RestController
    public class TestController {
        @CrossOrigin
        @GetMapping("test")
        public String test() {
            return "success";
        }
    }
    Nach dem Login kopieren

    @CrossOrigin注解源码

    @Target({ElementType.TYPE, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface CrossOrigin {
      
      /**
       * 这origins和value是一样的
       * 允许来源域名的列表,例如 www.baidu.com,匹配的域名是跨域预请求Response头中的Access-Control-Aloow_origin字段值。
       * 不设置确切值时默认支持所有域名跨域访问。
       */
      @AliasFor("origins")
      String[] value() default {};
      @AliasFor("value")
      String[] origins() default {};
      /**
       * 高版本下Spring2.4.4使用originPatterns而不是value和origins
       */
      String[] originPatterns() default {};
      /**
       * 跨域请求中允许的请求头中的字段类型, 该值对应跨域预请求Response头中的Access-Control-Allow-Headers字段值。
       * 不设置确切值默认支持所有的header字段(Cache-Controller、Content-Language、Content-Type、Expires、Last-Modified、Pragma)跨域访问
       */
      String[] allowedHeaders() default {};
      /**
       * 跨域请求请求头中允许携带的除Cache-Controller、Content-Language、Content-Type、Expires、Last-Modified、Pragma这六个基本字段之外的其他字段信息,
       * 对应的是跨域请求Response头中的Access-control-Expose-Headers字段值
       */
      String[] exposedHeaders() default {};
      /**
       * 跨域HTTP请求中支持的HTTP请求类型(GET、POST...),
       * 不指定确切值时默认与 Controller 方法中的 methods 字段保持一致。
       */
      RequestMethod[] methods() default {};
      /**
       * 浏览器是否将本域名下的cookie信息携带至跨域服务器中。默认携带至跨域服务器中,但要实现cookie共享还需要前端在AJAX请求中打开withCredentials属性。
       * 该值对应的是是跨域请求 Response 头中的 &#39;Access-Control-Allow-Credentials&#39; 字段值。
       */
      String allowCredentials() default "";
      /**
       * 该值的目的是减少浏览器预检请求/响应交互的数量。默认值1800s。设置了该值后,浏览器将在设置值的时间段内对该跨域请求不再发起预请求。
       * 该值对应的是是跨域请求Response头中的Access-Control-Max-Age字段值,表示预检请求响应的缓存持续的最大时间。
       */
      long maxAge() default -1;
    }
    Nach dem Login kopieren

    Das obige ist der detaillierte Inhalt vonSo konfigurieren Sie domänenübergreifende Filter in SpringBoot, um domänenübergreifenden Zugriff zu ermöglichen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    Video Face Swap

    Video Face Swap

    Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    Wie Springboot Jasypt integriert, um die Verschlüsselung von Konfigurationsdateien zu implementieren Wie Springboot Jasypt integriert, um die Verschlüsselung von Konfigurationsdateien zu implementieren Jun 01, 2023 am 08:55 AM

    Einführung in Jasypt Jasypt ist eine Java-Bibliothek, die es einem Entwickler ermöglicht, seinem Projekt mit minimalem Aufwand grundlegende Verschlüsselungsfunktionen hinzuzufügen und kein tiefes Verständnis der Funktionsweise der Verschlüsselung erfordert. standardbasierte Verschlüsselungstechnologie. Passwörter, Text, Zahlen, Binärdateien verschlüsseln ... Geeignet für die Integration in Spring-basierte Anwendungen, offene API, zur Verwendung mit jedem JCE-Anbieter ... Fügen Sie die folgende Abhängigkeit hinzu: com.github.ulisesbocchiojasypt-spring-boot-starter2 Die Vorteile von Jasypt schützen unsere Systemsicherheit. Selbst wenn der Code durchgesickert ist, kann die Datenquelle garantiert werden.

    Wie SpringBoot Redisson integriert, um eine Verzögerungswarteschlange zu implementieren Wie SpringBoot Redisson integriert, um eine Verzögerungswarteschlange zu implementieren May 30, 2023 pm 02:40 PM

    Nutzungsszenario 1. Die Bestellung wurde erfolgreich aufgegeben, die Zahlung erfolgte jedoch nicht innerhalb von 30 Minuten. Die Zahlung ist abgelaufen und die Bestellung wurde automatisch storniert. 2. Die Bestellung wurde unterzeichnet und es wurde 7 Tage lang keine Bewertung durchgeführt. Wenn die Bestellung abläuft und nicht ausgewertet wird, wird die Bestellung standardmäßig positiv bewertet. Wenn der Händler die Bestellung innerhalb von 5 Minuten nicht erhält, wird die Bestellung abgebrochen Es wird eine SMS-Erinnerung gesendet ... Für Szenarien mit langen Verzögerungen und geringer Echtzeitleistung können wir die Aufgabenplanung verwenden, um eine regelmäßige Abfrageverarbeitung durchzuführen. Zum Beispiel: xxl-job Heute werden wir auswählen

    So implementieren Sie verteilte Sperren mit Redis in SpringBoot So implementieren Sie verteilte Sperren mit Redis in SpringBoot Jun 03, 2023 am 08:16 AM

    1. Redis implementiert das Prinzip der verteilten Sperren und warum verteilte Sperren erforderlich sind. Bevor über verteilte Sperren gesprochen wird, muss erläutert werden, warum verteilte Sperren erforderlich sind. Das Gegenteil von verteilten Sperren sind eigenständige Sperren. Wenn wir Multithread-Programme schreiben, vermeiden wir Datenprobleme, die durch den gleichzeitigen Betrieb einer gemeinsam genutzten Variablen verursacht werden. Normalerweise verwenden wir eine Sperre, um die Richtigkeit der gemeinsam genutzten Variablen sicherzustellen Die gemeinsam genutzten Variablen liegen im gleichen Prozess. Wenn es mehrere Prozesse gibt, die gleichzeitig eine gemeinsam genutzte Ressource betreiben müssen, wie können sie sich dann gegenseitig ausschließen? Heutige Geschäftsanwendungen sind in der Regel Microservice-Architekturen, was auch bedeutet, dass eine Anwendung mehrere Prozesse bereitstellen muss. Wenn mehrere Prozesse dieselbe Datensatzzeile in MySQL ändern müssen, ist eine Verteilung erforderlich, um fehlerhafte Daten zu vermeiden wird zu diesem Zeitpunkt eingeführt. Der Stil ist gesperrt. Punkte erreichen wollen

    So lösen Sie das Problem, dass Springboot nach dem Einlesen in ein JAR-Paket nicht auf die Datei zugreifen kann So lösen Sie das Problem, dass Springboot nach dem Einlesen in ein JAR-Paket nicht auf die Datei zugreifen kann Jun 03, 2023 pm 04:38 PM

    Springboot liest die Datei, kann aber nach dem Packen in ein JAR-Paket nicht auf die neueste Entwicklung zugreifen. Es gibt eine Situation, in der Springboot die Datei nach dem Packen in ein JAR-Paket nicht lesen kann ist ungültig und kann nur über den Stream gelesen werden. Die Datei befindet sich unter resources publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input

    So implementieren Sie Springboot+Mybatis-plus, ohne SQL-Anweisungen zum Hinzufügen mehrerer Tabellen zu verwenden So implementieren Sie Springboot+Mybatis-plus, ohne SQL-Anweisungen zum Hinzufügen mehrerer Tabellen zu verwenden Jun 02, 2023 am 11:07 AM

    Wenn Springboot + Mybatis-plus keine SQL-Anweisungen zum Hinzufügen mehrerer Tabellen verwendet, werden die Probleme, auf die ich gestoßen bin, durch die Simulation des Denkens in der Testumgebung zerlegt: Erstellen Sie ein BrandDTO-Objekt mit Parametern, um die Übergabe von Parametern an den Hintergrund zu simulieren dass es äußerst schwierig ist, Multi-Table-Operationen in Mybatis-plus durchzuführen. Wenn Sie keine Tools wie Mybatis-plus-join verwenden, können Sie nur die entsprechende Mapper.xml-Datei konfigurieren und die stinkende und lange ResultMap konfigurieren Schreiben Sie die entsprechende SQL-Anweisung. Obwohl diese Methode umständlich erscheint, ist sie äußerst flexibel und ermöglicht es uns

    Vergleich und Differenzanalyse zwischen SpringBoot und SpringMVC Vergleich und Differenzanalyse zwischen SpringBoot und SpringMVC Dec 29, 2023 am 11:02 AM

    SpringBoot und SpringMVC sind beide häufig verwendete Frameworks in der Java-Entwicklung, es gibt jedoch einige offensichtliche Unterschiede zwischen ihnen. In diesem Artikel werden die Funktionen und Verwendungsmöglichkeiten dieser beiden Frameworks untersucht und ihre Unterschiede verglichen. Lassen Sie uns zunächst etwas über SpringBoot lernen. SpringBoot wurde vom Pivotal-Team entwickelt, um die Erstellung und Bereitstellung von Anwendungen auf Basis des Spring-Frameworks zu vereinfachen. Es bietet eine schnelle und einfache Möglichkeit, eigenständige, ausführbare Dateien zu erstellen

    Wie SpringBoot Redis anpasst, um die Cache-Serialisierung zu implementieren Wie SpringBoot Redis anpasst, um die Cache-Serialisierung zu implementieren Jun 03, 2023 am 11:32 AM

    1. Passen Sie den RedisTemplate1.1-Standard-Serialisierungsmechanismus an. Die API-basierte Redis-Cache-Implementierung verwendet die RedisTemplate-Vorlage für Daten-Caching-Vorgänge. Öffnen Sie hier die RedisTemplate-Klasse und zeigen Sie die Quellcodeinformationen der Klasse publicclassRedisTemplateextendsRedisAccessorimplementsRedisOperations an. Schlüssel deklarieren, verschiedene Serialisierungsmethoden des Werts, der Anfangswert ist leer @NullableprivateRedisSe

    Praktisches Tutorial zur SpringBoot+Dubbo+Nacos-Entwicklung Praktisches Tutorial zur SpringBoot+Dubbo+Nacos-Entwicklung Aug 15, 2023 pm 04:49 PM

    In diesem Artikel wird ein detailliertes Beispiel geschrieben, um über die tatsächliche Entwicklung von Dubbo + Nacos + Spring Boot zu sprechen. In diesem Artikel wird nicht zu viel theoretisches Wissen behandelt, sondern das einfachste Beispiel wird geschrieben, um zu veranschaulichen, wie Dubbo in Nacos integriert werden kann, um schnell eine Entwicklungsumgebung aufzubauen.

    See all articles