Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
【無料サンプル】もっと実践!サーバーサイドKotlin / server_side_kotli...
Search
FORTE
March 12, 2020
Technology
530
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【無料サンプル】もっと実践!サーバーサイドKotlin / server_side_kotlin_2_sample
FORTE
March 12, 2020
More Decks by FORTE
See All by FORTE
入門!実践!サーバーサイドKotlin〜2026春改訂版〜サンプル/sski2_sample
fortegp05
0
170
サーバーサイドKotlinやってみた!/ssk_meetup_18_01
fortegp05
1
59
Podcast配信で広がったアウトプットの輪~70人と音声発信してきた7年間~/outputconf_01
fortegp05
0
520
異夢同船〜異なる夢を持ちチームで作業する〜_サンプル/imudousen_sample
fortegp05
0
440
ラプラスの箱を開ける ~レトロゲームから学んだ工夫~/retro_games_any_03_01
fortegp05
1
110
ジモtechVol1_LT_フルリモート"され"力/jimotech_lt_1
fortegp05
0
84
超入門!サーバーサイドKotlin〜2026春更新版〜/sski1
fortegp05
0
610
MicronautでgRPCに入門!実践!サーバーサイドKotlin/sskm2_sample
fortegp05
0
130
アンチパターンから学ぶコミュニケーション/lcap_sample
fortegp05
0
230
Other Decks in Technology
See All in Technology
その Lambda、8分で 管理者権限まで奪われます
k1nakayama
3
520
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
740
aws-iot-platform-architecture-use-cases.pdf
ma2shita
0
190
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
160
Reactの設計論
uhyo
24
13k
AI de Idea
kawaguti
PRO
2
110
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
820
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
【技術的負債conf】事業成長に伴う技術的負債の説明責任とAIによるモニタリング、認知的負債について
i35_267
2
1.6k
おい、エージェントを使って終わらせろ
nwiizo
0
330
10分で知る最近のOmarchy
komagata
0
340
AIを活用するために決めた "やらないこと" - 価値に注目する / Not betting on AI
soudai
PRO
1
530
Featured
See All Featured
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
990
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Become a Pro
speakerdeck
PRO
31
6.3k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
230
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Mobile First: as difficult as doing things right
swwweet
225
10k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1k
sira's awesome portfolio website redesign presentation
elsirapls
0
410
The Curse of the Amulet
leimatthew05
3
14k
Transcript
None
ה㹋騧!؟٦غ٦؟؎س Kotlin FORTE խ衼 2020-03-01 晛 aozora Project 涪遤 1
כׄח ׆ס勓䩘מ⺅זיַגד׀לֵֹֿכַׇֹױն詇脢ס FORTE نؚٜطךն⯼詇ךֵր⪜ꪎ!㵅鴫!ئ٭ف٭ئؕغ Kotlinցמ䑛׀籽׀յ ♀㎇ئ٭ف٭ئؕغ Kotlin 勓剹׀ױגն勓剹⯼詇כ⻎ׂ Windowsյ Mac
╋㸐䗎ךնIDE מחַיע杅מ䔔꼸砈䨾עםַעםסךյ⯼詇 鞅؆ךַףゼ꾴םַעךն勓詇ס⫐㵼ך⮔־םַ掾ֵֿף⯼詇 锶־յץ詇脢*1 ױךׇ┞㖥ׂדַնيتعؙنؚ٭عך㎇瞩יַגד ׀ױն 劤衼ךⰻ㺁 ♀㎇עזכ㵅鴫!כַֹ׆כךյؤ٤بٖ٭ُ٭⻔ׄס Web ئ٭لتךע䖩 כ阋זיַל❈ٗ٭ا٭溫ꜗյ霼隍כؓوٛآ٭ب٘٤⪪ꪛ ס 2 掾מꫀי㵅鴫יײג篙卸闋鞃ױגն ٗ٭ا٭溫ꜗכ霼隍עאס䙎鮐┪յٗ٭ا٭ס⠥☭䝠㖥꽑־⺪茣䙎㜽ꌃ מ⪪ꪛגׂםַ䝠㖥꽑־⺪茣䙎ֿ둚ׂםױնאסג״ج؞ٖٛطؔ 茴䒘䙎מ┞㺽宜❈ֹ䖩锡ֵֿꌃ⮔כםױն♀㎇ע勓沁ꆻ氠ך׀ٝيٜ כ蔦⟤䭥זיַֻׄךעֵױ؆ֿյ㵅鍮❛כⳛ✑ؤ٭غ⪪ꪛ יַױնׂׂע瑭ֿ⠥☭ئ٭لتכי⪪ꪛյꆻ氠ג焒锶䭥זי勓沁 ꆻ氠ך׀ٝيٜסؤ٭غյ闋鞃יַ׀גַכ䘼זיַױնךֿյ♀㎇ עֵׂױך㕈狸ٝيٜס闋鞃כםױն ؓوٛآ٭ب٘٤⪪ꪛכַֹסע┞薭מظوٞؕכ⽿ףיַ✑噺מ םױն♀㎇עظوٞؕ⩰כי heroku 氠ַױגնherokuىٞؠע ئ٤وٜ㸯锺埛םؓوٛ⪪ꪛ⮔מע긊䊬מ➬⯈םئ٭لتךն♀㎇ע heroku 氠ַ׆כך Spring Boot ؓوٛآ٭ب٘٤ⳛ✑ױךס蝆Ⲩ ֿׯםׂםזגכַַֻׂ祔ⷃמך׀ױגն♀㎇עظوٞؕס䩘꽄 WindowsյMac ס╋偙ך闋鞃յؓوٛآ٭ب٘٤ٛٛ٭تכַֹז כٓزي٭ب٘٤ֿ┪ֿ鉿掿闋鞃יַ׀ױն *1 Twwiter https://twitter.com/FORTEgp05 2
וז➂ぢַֽ 勓詇ע⯼詇ր⪜ꪎ!㵅鴫!ئ٭ف٭ئؕغ Kotlinց鞅؆ךַ⯼䳀כיַױ ն⪽✄溷מע Kotlin + Spring Boot + JPA
+ Thymeleaf + ظ٭ذي٭ت h2 Database םלךظ٭ذ✑䧯յ嗱筺յ剳偆յ⯸ꯙַ CRUD ⭦槏 ֿ⮔־յזג׆כֵֿյꪛ溪欎㘶םלךמֵյֵַע蔦⮔ךֻ 瓦䍲ס偙㸐骭鞅脢כיַױն אסג״յ ئ٭ف٭ئؕغ Kotlin כע?Spring Boot כע?ֻזאא Kotlin זיםמ?鞅ײ偙־םַ˘כַֹ☭עץ⯼詇ךֵր⪜ꪎ!㵅鴫!ئ٭ف٭ ئؕغ Kotlinցֽ鞅ײמם׆כֽ⳹״ױն姌ס QR ؤ٭غյٛ٤ؠ־ 鮫⪜⺪茣ך!PR Ӛ㔳 1 衼ך顋㡰ل٦آ https://fortegp05.booth.pm/items/1560389 ֿך劤ד䖤ֿה ׆ס勓ע Java םלך Web ꪛ溪ס篑닫ֵֿ☭⻔ׄמئ٭ف٭ئؕغ Kotlin ךٗ٭ا٭霼隍כ霼⺪յظوٞؕ㵅鴫יײ勓ךն׆ס勓鞅ײ箽כ 姌סֹם枱䡢מםױն • Spring Security מ霼隍ס❈ַ偙ֿ⮔־ – ٗ٭ا٭溫ꜗ – ٗ٭ا٭霼隍 3
– ظنؚٜعٗ٭ا٭ס✑䧯 – 霼隍ꫀ➳סطتعס剹׀偙 • heroku סظوٞؕ – heroku סٗ٭ا٭溫ꜗ
– ظ٭ذي٭ت䱸籽䝠㖥סُتؠס♐偙 ֵםגס Kotlin ך Web ؓوٛآ٭ب٘٤✑גַյ⠥☭ئ٭لت✑זי ײגַכַֹ䘼ַמ瞩ֻג׆؆םמַֹ׆כעֵױ؆ն ֿך劤דכ鍑铡׃זְֿה 勓詇ךע Spring Security heroku ס闋鞃יַױֿյֵׂױך❈ַ偙 סײךֵ霄箖ם♐篁ײ╚麃סخ٭تؤ٭غמחַיע闋鞃יַױ؆ն Spring Security מחַיע㴞櫼םج؞ٖٛطؔ⟛隍סךעֵױ ؆նֵׂױךئ٤وٜخ٭تךֵյ勓沁欎㘶ךסⳛ✑㵅緷םמ־ס茴䒘䙎隉 偂قتיַסךעֵױ؆ն ױג闋鞃מע JPA Thymeleaf ❈氠יַױֿյ勓詇ךע闋鞃ױ؆ն ׂ־םַ!כַֹ偙עץ⯼詇ׇ镣מם׆כֽ⳹״ױն ֿך劤ך⢪ְ倯 ׆ס勓ע瞉脢ֿئ٭ف٭ئؕغ Kotlin מٗ٭ا٭溫ꜗյ霼隍ظوٞؕ 㳔ש╚ך沼ゼמ䘼זג׆כ鞪ג׆כ䪫銉剹ס䓺ךؓؗعوشعג סךնאסג״յٗ٭ا٭霼隍溫ꜗמחַי焒גׄף睗 1 皹րSpring Security מ霼隍כٗ٭ا٭溫ꜗցסً٭ة־ׇ镣ׂדַնױגכֵֻ ظوٞؕיײגַ!כַֹ׆כךֵף睗 2 皹րظوٞؕց־ׇ镣ׂד ַնה؆劄⮴־⪢ꌃ鞅؆ךַגדַי㝕┨㝜ךն 勓剹ע׆ס勓סכֽמףⳛׂסֿך׀յכַֹכ׆潨䭰י剹 ־יַױն׆ס勓鞅״ף槏㺌♐篁ײֿי槏闋ך׀ֹמע剹־ יַױ؆ն׆ס勓⪜כיאסמ㞺מֵ׆כמ蕟⽱䭥זיַג דׄג䌗ַךն 杅מٗ٭ا٭霼隍յ霼⺪מחַיע׆⯈氠׆כךױױםؓوٛ آ٭ب٘٤ꪛ溪ֿ⺪茣מםכ䘼ַױնץյ׆⯈氠י蔦⮔氠סص٭ٜ ✑זגיײיׂדַն ױג׆ס勓סؤّٚעⳈ䒣阾ꜗכי瑭ֿ䠊גَؕ٤عـُזגَؕ٤ع םל闋鞃יַױնגכֻף׆ױ״מلٜغכⲯ椙ַַֿ٭כ־յ⯼ 詇־לַׂ䧯ꩽך׀יַ־?ײגַם需יַױնKotlin כ潲䱸ꫀ ➳םַ需יַ־ױ؆ֿյ־זג锶יײיׂדַն 鞅ײ箽זג䠊䞯ꪨꇙַס䭰䷂յꃯⲎ锡劳םלע姌סـشبٖذء氠ַי Twitter ך⽌ַיַגדׄכ㯹ַךնץյ䠊䞯ֽ䔵היֽױն #ה㹋騧؟٦غ٦؟؎سKotlin 4
⯜顑✲갪 勓剹מ阾鼥⫐㵼ע瞉脢ס䨾㺲篁縨ס⪪䑑锶闋ךעֵױ؆նױגյ 勓剹ע⺪茣םꮹ婞牞劻ֹמⲚ״יַױֿյ瞉脢ֿאס⫐㵼⟛隍 סךעֵױ؆նאסג״յ勓剹ס阾鼥⫐㵼מ㕈טַג鞅脢ס鉿掿յצ鞅 脢ֿ錺זג䴮㵬מחַי瞉脢עם؆鬬⚈鬘ֹסךעֵױ؆ն 5
湡如 כׄח 2 勓詇ס⫐㵼 . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 2 ל؆ם☭⻔ׄ־ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 ׆ס勓ך䕑׆כ . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 ׆ס勓ךע闋鞃םַ׆כ . . . . . . . . . . . . . . . . . . . . . . . . 4 ׆ס勓ס❈ַ偙 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 ⩸鬬◜꽃 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 痥 1 畍 Spring Security ח״钠鏾הِ٦ؠ٦涫ꐮ 8 1.1 Spring Security כע . . . . . . . . . . . . . . . . . . . . . . . 8 1.2 ꪛ溪欎㘶מחַי . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.2.1 ف٭ة٘٤┞镣㕂瞉免 . . . . . . . . . . . . . . . . 9 1.3 Spring Security ךֽ䩘鼓霼隍 . . . . . . . . . . . . . . . . . . 9 1.4 㵅氠溷ם霼隍כי硄槏脢氺긖㵅鍮 . . . . . . . . . . . . 11 1.4.1 霼隍䝠㖥כי⚈䟨סٗ٭ا٭⻏כقت٠٭غ陭㴻 11 1.4.2 ظ٭ذي٭ت氠ַיٗ٭ا٭䝠㖥硄槏 . . . . . . 15 1.5 锡霼隍ً٭ةכי硄槏脢氺긖㵅鍮 . . . . . . . . . . . . 23 1.5.1 霼隍㸐骭ً٭ةס陭㴻 . . . . . . . . . . . . . . . . . . 23 1.5.2 硄槏脢氺긖מ阾◜┞镣銨獏 . . . . . . . . . . . . . 25 1.5.3 硄槏脢氺긖ך阾◜סⷃ俙⯸ꯙ . . . . . . . . . . . . . . . 33 1.5.4 硄槏脢氺긖ך阾◜ס鏿俙⯸ꯙ . . . . . . . . . . . . . . . 36 1.6 ٗ٭ا٭溫ꜗ㵅鍮 . . . . . . . . . . . . . . . . . . . . . 41 1.6.1 ٗ٭ا٭溫ꜗ氺긖סꈴ瓌㵅鍮 . . . . . . . . . . 41 1.6.2 ٗ٭ا٭溫ꜗ⭦槏ס㵅鍮 . . . . . . . . . . . . . . . . . 49 1.6.3 ٗ٭ا٭ٞءؕ٤סⳛ✑牞霼 . . . . . . . . . . . . . . . 57 1.7 溫ꜗגٗ٭ا٭䝠㖥ך阾◜䫋畇⯜䕣 . . . . . . . . . . . 65 痥 2 畍 رفٗ؎ 75 2.1 heroku מظوٞؕ . . . . . . . . . . . . . . . . . . . . . . 75 2.2 ظوٞؕסٛتؠכ㸐瞬 . . . . . . . . . . . . . . . . . . . . . 75 2.2.1 ٛتؠ . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 6
2.2.2 㸐瞬 . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 76 2.3 ظوٞؕס徙⤫ . . . . . . . . . . . . . . . . . . . . . . . . . . 76 2.3.1 霼隍䝠㖥ס欎㘶㜟俙ⵊ . . . . . . . . . . . . . . . . . . 76 2.3.2 heroku סٗ٭ا٭溫ꜗ . . . . . . . . . . . . . . . . . 77 2.3.3 heroku cli Windwos מؕ٤تع٭ٜ . . . . . . . 79 2.3.4 heroku cli Mac מؕ٤تع٭ٜ . . . . . . . . . . 80 2.3.5 heroku cli ךٞءؕ٤ . . . . . . . . . . . . . . . . 81 2.3.6 git סؕ٤تع٭ٜ . . . . . . . . . . . . . . . . . . . . 81 2.3.7 Github ס徙⤫ . . . . . . . . . . . . . . . . . . . . . . 82 2.3.8 psql ؕ٤تع٭ٜ . . . . . . . . . . . . . . . . . 82 2.3.9 psql Windows מؕ٤تع٭ٜ . . . . . . . . . . 82 2.3.10 psql Mac מؕ٤تع٭ٜ . . . . . . . . . . . . . 88 2.4 heroku מظوٞؕ . . . . . . . . . . . . . . . . . . . . . . 88 2.4.1 heroku ؓوٛ✑䧯 . . . . . . . . . . . . . . . . . 89 2.4.2 heroku מظ٭ذي٭تכי PostgreSQL جشع 89 2.4.3 heroku מؓوٛوشبٖ . . . . . . . . . . . . . 89 2.4.4 硄槏脢ٗ٭ا٭溫ꜗ . . . . . . . . . . . . . . . . 91 2.4.5 ⳛ✑牞霼 . . . . . . . . . . . . . . . . . . . . . . . . . 94 2.4.6 긊⪪ꪛמ . . . . . . . . . . . . . . . . . . . . . . . 94 ֮הָֹ 96 ؤ٭غ剹ׂסֿ㝕㜟 . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 ئ٭ف٭ئؕغ Kotlin 䌮״יַׂ . . . . . . . . . . . . . . . . . . . 97 劄䔿מםױגֿ˘ . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 ꨵ㶨晛חאְג 98 衼罏稱➜ 99 倀皹 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 銨筤ؕٚتع䬎䓜 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 7
痥 1 畍 Spring Security ח״钠鏾ה ِ٦ؠ٦涫ꐮ 1.1 Spring Security
הכ Spring Security ע霼隍ֽצؓؠجت⯜䕣نٝ٭ّ٠٭ؠךն⻏⯼סכֽ Spring نٝ٭ّ٠٭ؠס┞ꌃךֵյSpring עה؆յJava ؓوٛآ٭ ب٘٤מ霼隍כ霼⺪ס╋偙䳀❵׆כֿך׀ױնאי䒣ⲇךֵյ둚䍲 מتذُؕث⺪茣כםזיַױն ׆׆ךַֹ霼隍כעؓؠجتי׀גٗ٭ا٭餟⯁勓䓜מ勓☭ךֵ׆כ 牞霼׆כךն⪽✄溷מעقت٠٭غמ牞霼מםױնאסג״յ قت٠٭غע䓜☭־焒םַסךֵכַֹ⯼䳀כםיַױնםֽյٗ٭ ا٭ס ID ע霼隍ךעםׂٗ٭ا٭餟⯁ג״ססמםױն 姌מ霼⺪כעյאסٗ٭ا٭ס㺲䙎מ䗎יؓؠجتך׀碃㎪牞霼׆ כךնגכֻף硄槏脢氺긖מע硄槏脢־ؓؠجتך׀םַյٗ٭ا٭氺긖מ עאסٗ٭ا٭־ؓؠجتך׀םַםלֿ霼⺪כםױն勓詇ךע Role כ ַֹ㺲䙎ךאסٗ٭ا٭ؓؠجتך׀碃㎪⯜䕣יַױն ⪪䑑ً٭ة蝠靣ע姌מםױն https://spring.io/projects/spring-security 1.2 涪橆㞮חאְג 勓詇ע⯼詇ր⪜ꪎ!㵅鴫!ئ٭ف٭ئؕغ Kotlinցמ䑛׀籽ַיַױסךյא סوٞةؘؠع䑛׀类ַך闋鞃יַ׀ױն勓詇־鮫⪜ג㖪⻉ע 姌ס URL ⯼詇ס劄䔿ס枱䡢סوٞةؘؠعرؗ٤ٞ٭غיׂדַն https://github.com/fortegp05/server_side_kotlin_bbs_sample/ releases/tag/ssk1 ה؆⯼詇ׇ鮫⪜꼾ַי 1 ־㢼״יַגדַי㝕┨㝜ךPR https://fortegp05.booth.pm/items/1560389 8
1.3 Spring Security דֶ䩛鯪钠鏾 םֽյ勓剹ךׇ箩♃יַخ٭تؤ٭غס㴞䧯ע姌ס Github َٛةعٛ מؓشوٞ٭غ座ײךն https://github.com/fortegp05/server_side_kotlin_bbs_sample ױגյ⻎⫐㵼
Java ך銨槁גخ٭تؤ٭غׇ氠䟨יֵױն־ז ג✶יׇ⯈氠ׂדַն https://github.com/fortegp05/java_bbs_sample 1.2.1 غ٦آّٝ♧鋮㛁瘗儗 Windows • WindowsWindows 10 Version 1903OS Build 18362. 592 • IntelliJ IDEACommunity 2019.2.1 192.6262.58 • VS CodeVersion 1.38.0 MacOS • macOSmacOS Catalina 10.15.1 • IntelliJ IDEACommunity 2019.1.3 191.7479.19 • VS CodeVersion 1.41.1 Ⱏ鸐ךך • Spring Boot 2.1.8 • Java12.0.2 1.3 Spring Security דֶ䩛鯪钠鏾 אךע Spring Security 氠ַי祔ⷃמٗ٭ا٭霼隍יײױն䬚㲳䫕 ׄל祔ⷃמך׀ױסךյ┞糿מזיײױֹնױע spring-boot- starter-security build.gradle.kts מꃯⲎױն implementation("org.springframework.boot:spring-boot-starter-security") BootRun יրhttp://localhost:8080ցמؓؠجتיײױնכյ姌 סֹם霼隍氺긖ֿ⮂ױն 9
1.3 Spring Security דֶ䩛鯪钠鏾 Ӛ㔳 1.1 钠鏾歗 ׆סٗ٭ا٭ס Username ע
userյقت٠٭غע姌ס䓺䑑ך鱍ⳛ免סٞءמ⮂ ױն Using generated security password: f6e32e29-ab80-4f5a-a22c-ce0b48b0eadb Ӛ㔳 1.2 钠鏾䞔㜠 ׆ס䝠㖥ךٞءؕ٤כ䲔獏卆氺긖ֿ銨獏ױն 10
1.4 㹋欽涸ז钠鏾ה׃ג盖椚罏歗㹋鄲ׅ 1.4 㹋欽涸ז钠鏾ה׃ג盖椚罏歗㹋鄲ׅ ׆ך Spring Security מ霼隍篑닫ך׀ױגն־յ׆סױױךע ئ٭ف٭鱍ⳛגצמ嬐㎇قت٠٭غֿ㜟זיױַױյַהַהٞ ء־قت٠٭غ䭠זי׆םׄףםױ؆նٗ٭ا٭⻏
user ㎷㴻ך յقت٠٭غעꩽׁי镊ֻםַךֹնזכ蔦⮔ך䪒ַַقت ٠٭غמגַכ䘼זיױַױն חױױזגׂ㵅氠溷ךעםַׄךնא׆ך Spring Security ס陭㴻㜟 剳י㵅氠溷ם♐篁ײמיײױֹն霼隍סْؕ٭ةכיע硄槏脢־ؓ ؠجتך׀םַ硄槏脢氺긖✑䧯յאסً٭ةמ㸐霼隍כ霼⺪陭㴻י ײױն Ӛ㔳 1.3 盖椚罏歗ך؎ً٦آ 1.4.1 钠鏾䞔㜠ה׃ג⟣䠐ךِ٦ؠ٦せהػأٙ٦س鏣㹀ׅ ױע霼隍䝠㖥כי⚈䟨סٗ٭ا٭⻏כقت٠٭غס陭㴻鉿זיַ׀ױն ױעր/src/main/kotlin/com/example/app/bbs/ցס┫מրconfigցכַֹ قشآ٭ة✑䧯յ偆锺نٜؒؕրBbsAdminWebSecurityConfig.ktց✑䧯 ױն╚麃ע姌סכֽךնםֽյimport 倀ע筤긖סꌬ⻉ךꄫ╚ך侉鉿י ַױն㵅鍮免ע侉鉿םַֹיׂדַն Ӟٔأز 1.1 盖椚罏歗钠鏾䞔㜠鏣㹀 11
1.4 㹋欽涸ז钠鏾ה׃ג盖椚罏歗㹋鄲ׅ 1: package com.example.app.bbs.config 2: 3: import org.springframework.beans.factory.annotation.Autowired 4:
import org.springframework.context.annotation.Bean 5: import org.springframework.context.annotation.Configuration 6: import org.springframework.security.config.annotation.authentication. 7: builders.AuthenticationManagerBuilder 8: import org.springframework.security.config.annotation.web.configuration. 9: EnableWebSecurity 10: import org.springframework.security.config.annotation.web.configuration. 11: WebSecurityConfigurerAdapter 12: import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder 13: import org.springframework.security.crypto.password.PasswordEncoder 14: 15: 16: @Configuration 17: @EnableWebSecurity 18: class BbsAdminWebSecurityConfig : WebSecurityConfigurerAdapter() { 19: 20: @Autowired 21: lateinit var passwordEncoder: PasswordEncoder 22: 23: @Bean 24: fun passwordEncoder(): PasswordEncoder { 25: return BCryptPasswordEncoder() 26: } 27: 28: @Override 29: override fun configure(auth: AuthenticationManagerBuilder) { 30: 31: auth.inMemoryAuthentication() 32: .withUser("admin") 33: // 如כ鍑铡欽ח䎂俑ד鎸鯹׃גְךד㹋ꥷחװגכتً 34: .password(passwordEncoder.encode("root")) 35: .authorities("ROLE_ADMIN") 36: } 37: } ׆׆ך偆ׂ溫㖪ג圸倀מחַי闋鞃יַ׀ױն 竰䪫הؙٓأせך֮הך䭍䓜 ♀㎇ע րBbsAdminWebSecurityConfig : WebSecurityConfigurerAdapter()ց כםזיַױֿյ׆ס类䪩⩧מחַיַ䭇䒁עؤ٤تعٚؠذ⽿צדյ כַֹ䭰㴻מםױնKotlin ךע Java כꇙזי僻獏溷מؤ٤تعٚؠذ㴻 聋י类䪩⩧סؤ٤تعٚؠذ⽿צ⮂ֹם剹׀偙םׂכյ类䪩⩧ס 㵋阋免מؤ٤تعٚؠذ┞糿מ⽿צ⮂׆כֿ⺪茣כםזיַױն override 〣 ْخشغ㵋阋ס⯼מֵրoverrideց⺝ע僻獏溷מ؛٭ف٭ٚؕغ׆כ 㵋阋ױնKotlin עظنؚٜعךْخشغס؛٭ف٭ٚؕغע珡婝יַױ նאסג״յ؛٭ف٭ٚؕغגַכ׀ע僻獏溷מא㵋阋䖩锡ֵֿ ױնאסג״ס餟⯁㲳ֿրoverrideց⺝מםױն 12
1.4 㹋欽涸ז钠鏾ה׃ג盖椚罏歗㹋鄲ׅ םֽյ⻎ֹם⦍׀סך@Override כַֹؓؿط٭ب٘٤ֵֿױ ֿյ׆הע Kotlin ס阋靣♐坎כע摾ꫀ➳םסךյ@Override דׄ♕ׄי Kotlin סؤ٤قֿٜؕכֽױ؆նױג╋偙♕ׄ䟨⽱עםַסך
override ⺝♕ׄגؓؿط٭ب٘٤ע摾ׂיַךֹն PasswordEncoder PasswordEncoder עقت٠٭غ㴗⪢מ⭦槏ג״מـشبٖⵊ♐篁 ײכםזיַױնبتطّך氠ַقت٠٭غע䖩ـشبٖⵊםל יյبتطّ┪מ䌐倀ך⟛㲽׆כע婝״ױֹն┧ֿ┞ظ٭ذي٭ت䝠 㖥نٜؒؕյٞء䝠㖥םלֿ嵣⮂ג㖪⻉յقت٠٭غ嵣⮂יױַױն אי嵣⮂יױזגٗ٭ا٭ֿ⻎قت٠٭غ❈ַ㎇יַגյ♑ס بتطّ┮婞ؓؠجتס㸐骭כםזיױַױն ـشبٖⵊגقت٠٭غעյ⩧ס倀㲻⮬מ䨴׆כ䕮⩧ֿ긊䊬מ㝕㜟ך նאסג״յ嵣⮂ג׆כֿ־ף䕮⩧ױֻמقت٠٭غ㜟ֻגյ ؓؠجتꈚ偂׆כֿך׀ױնـشبٖⵊף㴞櫼כַֹׄךעֵױ ؆ֿյ◝ꓨ┩ꓨמ㸐瞬׆כך錺㵬㸯ׂ׆כֿך׀ױն ♀㎇עـشبٖⵊס♐篁ײמ BCryptPasswordEncoder ❈氠יַױֿյ ♑מַׂח־ֵױն׆׆ךע BCryptPasswordEncoder ךꪨמ⻉ֹג״ 闋鞃ױ؆ֿյ霄ׂע⪪䑑ס JavaDoc מ♑סؠٚتֿ▗זיַױն https://docs.spring.io/spring-security/site/docs/current/api/ org/springframework/security/crypto/password/PasswordEncoder. html םֽյ闋鞃氠מخ٭تמ䌐倀ך剹ַיַױֿյ ꆻ氠免 Github םלמخ٭ ت push כ׀ע簮㸐זיעرْךն㵅갾מ Github ־霼隍䝠㖥ֿ悁崻 ◜❛םלֿ㖥⼴יַױնج؞ٖٛطؔס◜侚עـش؞٤ءםלמ㜽 ꌃ鱍㎋ססյ⫐ꌃ鱍㎋ססֿ㝂ַכ㖥⼴יַױ*1 ն׆ע⫐ꌃ ┮婞סֹם䟨㎫溷ם鉿ⳛײױֿյ䟨㎫יַםַِتםלײױն ج؞ٖٛطؔ㸐瞬ע✇םׄף眞ַ需ךײױֿյ✇־ֵזי־ךעꆬַ סמםױն册嫘־둚ַ䟨餟䭥זיֽׂכַכַֹכ׀מ浌ַ䘼ַ םׂי座׳⺪茣䙎ֿ둚ַךն *1 䝠 㖥 ج ؞ ٖ ٛ ط ؔ ؕ ٤ ب ظ ٤ ع מ ꫀ 鞪 吉 㖥 ⼴ 剹 https://www.jnsa.org/result/incident/2018.html 13
1.4 㹋欽涸ז钠鏾ה׃ג盖椚罏歗㹋鄲ׅ [րبتطّ┪מقت٠٭غע䌐倀ך⟛㲽םցײגַם׆כעל׆ך 㳔?] ׆ס倀皹剹ַיַי沼ゼמ䘼זגסךֿյ րبتطّ┪מقت٠٭غ ע䌐倀ך⟛㲽םցכַֹֹם׆כל׆ך㳔؆דסךֹ־?瑭 ע阾䤾מעםַךֿյ䚐ׂؾشع┪ךאַֹזג阾ꃍ锶גסדכ 䘼ַױն㸴םׂכ㸗ꪎ㳔吾ך׆ַֹזג⫐㵼㳔؆ד镊ֻעֵױ ؆ն┞䗎
IPA מע㴗⪢םؘؗهئؕعס✑偙כַֹً٭ةֵֿא ׆ךע㳔ֹךն *2 ךֿյ傽䊬溷מ IPA סئؕعם؆י锶םַךյ⚶獗ך锶ג镊ֻ עםַסך׆׆ך㳔שכַֹסעם־ם־곓ַךנն ♀ס䨾ע勓詇סֹם鞋־סؓؗعوشعמרյ蔦⮔ךؓؗعوشع ֹכי鞪יײֵגֿ㳔⺪茣䙎כיע둚אֹךն䍴 י䔵זיַיע✇䕑םַյכַֹ׆כםס־ױ؆ն inMemoryAuthentication ׆סْخشغע霼隍ْٓٛך鉿ֹ׆כ獏ױնْٓٛךסךյئ٭ ف٭⢶婝ף巆ֻיױַױն姌מ鱍ⳛגכ׀מ霼隍䝠㖥⟛䭥ג ״מյwithUser ْخشغ password ْخشغך霼隍䝠㖥陭㴻יַױն 闋鞃ֿꩽׂםױגֿյ䌐倀ך鼥יױזיַقت٠٭غـشبٖⵊ סמ翝׀䳕ֻ✑噺ױնⷃ筙ם需յ䌐倀סقت٠٭غךֵրrootց ـشبٖⵊגס㵅鍮ףַַדׄםסךյ┞䍲㵅갾מـشبٖⵊג סٞءמ⮂ⲇיא⺅⮂י㵅鍮ױն 姌 րBbsAdminWebSecurityConfig.configureց מ阾鼥י BootRun יׂ דַն val password: String = passwordEncoder.encode("root") System.out.println(password) כٞءמـشبٖⵊגقت٠٭غֿٞءמ銨獏סךյؤم٭ יقت٠٭غכי䭰㴻ױֹն׆סכ׀յ䗆מ System.out.println ע ⯸ꯙיֽ׀ױն Ӟٔأز 1.2 عحءُ⻉׃ػأٙ٦س䭷㹀ׅ *2 IPA ס㴗⪢םؘؗهئؕعס✑偙 https://www.ipa.go.jp/security/vuln/websecurity.html 14
1.4 㹋欽涸ז钠鏾ה׃ג盖椚罏歗㹋鄲ׅ 1: // 㢌刿䖓 2: auth.inMemoryAuthentication() 3: .withUser("admin") 4:
.password( 5: "\$2a\$10\$CPNJ.PlWH8k1aMhC6ytjIuwxYuLWKMXTP3H6h.LRnpumtccpvXEGy" 6: ) 7: .authorities("ROLE_ADMIN") 8: 9: // 如כ䘌׆חꤐ׃גֶֻ 10: val password: String = passwordEncoder.encode("root") 11: System.out.println(password) BootRun םֽיյUsername ע adminյقت٠٭غע root ךٞءؕ٤ך ׀ף牞霼 OK ךն׆ךٗ٭ا٭⻏כقت٠٭غ⚈䟨ססמ翝׀䳕ֻ ׆כֿך׀ױגն [㴻劻溷מلٜغBootRunֹն] ┞宜מ㝕ꓪמ㵅鍮י BootRun כؙٚ٭ֿ鱍׀גכ׀ס⮗⮔ׄ ֿ긖⠱מםױնؙٚ٭ٞءꃯַ־ׄחחյ㝕ꓪס㜟剳掾┞⠥ ח锶יַׂסע긖⠱ךנնאיյ긖⠱מםכٓزيֿ┫ֿזי ꅼ״טׂםזיױַױն א׆ךյ䢍םַؤ٭غ剹ַיַׂכ׀ע㸴ח剹ַיעلٜغ כتعٝت┫ׅחח⯼מꅼ؆ךַׄכ䘼ַױնגכֻף 1 ْخش غյ1 نٜؒؕ㵅鍮גلٜغסֹמյٛثّ✑זיַׂכ ַךֹն 1.4.2 ر٦ةك٦أ欽ְגِ٦ؠ٦䞔㜠盖椚ׅ ⚈䟨סٗ٭ا٭כقت٠٭غח硄槏脢ٗ٭ا٭✑䧯ך׀ױגֿյ 硄槏脢ٗ٭ا٭鏿俙㙟גյ⻏⯼قت٠٭غ㜟ֻגׂםזגכ׀מַ הַהخ٭تؤ٭غַסע┮➬ךנն硄槏脢ٗ٭ا٭םסךא؆םמ 㜟剳ֵֿׄךעםַךֹֿյ㸝匡溷מ┞薭ٗ٭ا٭㵅鍮־ םַ׆כ脝ֻכ┞薭ٗ٭ا٭כ⻎坎מظ٭ذي٭تס䝠㖥ך霼隍ך׀גֹ ֿ➬⯈אֹךն כַֹׄךյ׀ל✑䧯ג硄槏脢ٗ٭ا٭ס霼隍䝠㖥ظ٭ذي٭تס 䝠㖥מ㜟剳יײױֹնױע Entity ✑䧯יַ׀ױն Ӟٔأز 1.3 User ך Entity ⡲䧭 15