Tale: "=", "&"๋ฅผ ํฌํ•จํ•œ ๊ธฐ์‚ฌ๋ฅผ ๊ฒŒ์‹œํ•˜๋ฉด ์ €์žฅ์— ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2019๋…„ 12์›” 18์ผ  ยท  6์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: otale/tale

๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋กœ๊ทธ์ธ ํ›„ ๊ธ€์„ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ ์ผ๋ถ€ ์„ค๋ช…์—๋Š” ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ ์Šค๋‹ˆํŽซ์„ ์‚ฝ์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฒฐ๊ณผ ์ €์žฅ ์‹œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ณด๊ณ ๋œ ๊ฒƒ์œผ๋กœ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
io.netty.handler.codec.http.multipart.HttpPostRequestDecoder$ErrorDataDecoderException: java.io.IOException: Unable to create temporary file, C:\Users\pys1714\AppData\Local\Temp\Attr_7771572786958116046_{"cid":4,"title":
์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ  ์ฒ˜์Œ์—๋Š” ์ €์žฅ ์ „๋žต์ด ํŒŒ์ผ๋กœ ์บ์‹ฑํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด์— ์ œํ•œ์ด ์žˆ์–ด ํ…์ŠคํŠธ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋””๋ฒ„๊ทธํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž„์‹œ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํŒŒ์ผ์„ ๋งŒ๋“  ์ด์œ ๊ฐ€ ์•„๋‹๊นŒ ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜์— ๋”ฐ๋ผ ๊ธฐ๋ณธ ๋ฉ”์†Œ๋“œ io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.parseBodyAttributes() ์ฐพ์œผ์‹ญ์‹œ์˜ค.

๊ทธ ๋ฐฉ๋ฒ•์„ ์ง€์ผœ๋ณธ ๊ฒฐ๊ณผ, netty๋Š” ๋‚ด๊ฐ€ ์ „๋‹ฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ํ•˜๋‚˜ํ•˜๋‚˜ ์ผ์ข…์˜ ํŒ๋‹จ์„ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

switch (currentStatus) {
case DISPOSITION:// search '='
     // other code
    break;
case FIELD:// search '&' or end of line
    // other code
    break;
default:
    // just stop
    sao.setReadPosition(0);
    contRead = false;
    break loop;
}

๋Œ“๊ธ€์— "=" ๋ฐ "&" ๋‘ ๋ฌธ์ž๋ฅผ ์ฟผ๋ฆฌํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์‹œ๋„ํ•˜๋ฉด ๋‚ด ๊ธฐ์‚ฌ์— "="๋งŒ ํฌํ•จ๋˜๊ณ  ์ €์žฅ์„ ํด๋ฆญํ•˜๋ฉด ์˜ˆ์ƒ๋Œ€๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ณด๊ณ ๋ฉ๋‹ˆ๋‹ค.
io.netty.handler.codec.http.multipart.HttpPostRequestDecoder$ErrorDataDecoderException: java.io.IOException: ๆ–‡ไปถๅใ€็›ฎๅฝ•ๅๆˆ–ๅทๆ ‡่ฏญๆณ•ไธๆญฃ็กฎใ€‚
"&"๋ฅผ ๋‹ค์‹œ ์‹œ๋„ํ–ˆ๊ณ  ๊ทธ๋ ‡๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜๋Š” netty์˜ ๊ฐœ์ธ ๋ฐฉ๋ฒ•์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„์ง ๊ตฌ์ฒด์ ์ธ ํ•ด๊ฒฐ์ฑ…์ด ์—†์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. https://juejin.im/post/5c63a028f265da2d9262c662

๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ•์€,

  1. src/main/java ์•„๋ž˜์— ํŒจํ‚ค์ง€ ์ƒ์„ฑ: io.netty.handler.codec.http.multipart

  2. netty-codec-http-4.1.30.Final.jar์— ํ•ด๋‹นํ•˜๋Š” ์†Œ์Šค ์ฝ”๋“œ์—์„œ HttpPostStandardRequestDecoder.java ์ฐพ๊ธฐ

  3. ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ ๋งŒ๋“  ํŒจํ‚ค์ง€์— ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  4. parseBodyAttributes() ์ฐพ์•„ ๋ฉ”์„œ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์— ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
          return;
}
  1. maven ํŒจํ‚ค์ง€ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ tale ํŒจํ‚ค์ง€

๋ชจ๋“  6 ๋Œ“๊ธ€

ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. https://juejin.im/post/5c63a028f265da2d9262c662

๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ•์€,

  1. src/main/java ์•„๋ž˜์— ํŒจํ‚ค์ง€ ์ƒ์„ฑ: io.netty.handler.codec.http.multipart

  2. netty-codec-http-4.1.30.Final.jar์— ํ•ด๋‹นํ•˜๋Š” ์†Œ์Šค ์ฝ”๋“œ์—์„œ HttpPostStandardRequestDecoder.java ์ฐพ๊ธฐ

  3. ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ ๋งŒ๋“  ํŒจํ‚ค์ง€์— ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  4. parseBodyAttributes() ์ฐพ์•„ ๋ฉ”์„œ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์— ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
          return;
}
  1. maven ํŒจํ‚ค์ง€ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ tale ํŒจํ‚ค์ง€

ํ , ํ•œ์ฐธ์„ ๊ฒ€์ƒ‰ํ•œ ๊ฒฐ๊ณผ, Blade์˜ ๋งจ ์•„๋ž˜ ๋ ˆ์ด์–ด์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ•œ ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์Œ์ด ๋ถ€์„œ์กŒ๋‹ค. ๋จผ์ € ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค.๊ฐ์‚ฌ

๋ฐฉ๋ฒ•์€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค๋งŒ, ์ฝ”๋“œ๋ฅผ ์ฝ์–ด๋ณด๋‹ˆ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. .๋ฌด์ง€๋ฅผ ํ‘œํ˜„ํ•˜๋‹ค

Blade netty์˜ ์˜์กด์„ฑ ์—…๊ทธ๋ ˆ์ด๋“œ
<dependency> <groupId>io.netty</groupId> <artifactId>netty-codec</artifactId> <version>4.1.31.Final</version> </dependency>

Blade netty์˜ ์˜์กด์„ฑ ์—…๊ทธ๋ ˆ์ด๋“œ
<dependency> <groupId>io.netty</groupId> <artifactId>netty-codec</artifactId> <version>4.1.31.Final</version> </dependency>

์‹œ๋„ํ–ˆ์ง€๋งŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. . .

ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. https://juejin.im/post/5c63a028f265da2d9262c662

๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ•์€,

  1. src/main/java ์•„๋ž˜์— ํŒจํ‚ค์ง€ ์ƒ์„ฑ: io.netty.handler.codec.http.multipart
  2. netty-codec-http-4.1.30.Final.jar์— ํ•ด๋‹นํ•˜๋Š” ์†Œ์Šค ์ฝ”๋“œ์—์„œ HttpPostStandardRequestDecoder.java ์ฐพ๊ธฐ
  3. ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ ๋งŒ๋“  ํŒจํ‚ค์ง€์— ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  4. parseBodyAttributes() ์ฐพ์•„ ๋ฉ”์„œ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์— ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
          return;
}
  1. maven ํŒจํ‚ค์ง€ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ tale ํŒจํ‚ค์ง€
if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
          return;
}

์ด ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” โ†“

if(!this.request.headers().get("Content-Type").startsWith("application/x-www-form-urlencoded")){
            return;
 }

์™„๋ฒฝํ•œ ์†”๋ฃจ์…˜๐Ÿ‘
A(G1% (QH{7~MTO)O438YC5
A(G1% (QH{7~MTO)O438YC5

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰