บทความนี้เข้าใจวิธีที่ตัวกรองและตัวดักทำงานผ่านการฝึกอบรมการรับรองความปลอดภัยอย่างง่าย
บทความจำนวนมากเชื่อมโยงตัวกรองตัวดักจับและผู้ฟังที่มีฤดูใบไม้ผลิเพื่ออธิบายและเชื่อว่าตัวกรองตัวดักจับและผู้ฟังนั้นใช้ฟังก์ชั่นส่วนประกอบที่ใช้กันอย่างแพร่หลายในฤดูใบไม้ผลิ
แต่การพูดอย่างเคร่งครัดตัวกรองและผู้ฟังเป็นของ Servlet API และไม่มีส่วนเกี่ยวข้องกับฤดูใบไม้ผลิ
เนื่องจากตัวกรองสืบทอดมาจากอินเตอร์เฟส javax.servlet.filter และผู้ฟังที่สืบทอดมาจากอินเตอร์เฟส javax.servlet.servletContextListener, interceptor เท่านั้น
ผังงานด้านบนอ้างอิงจากข้อมูลออนไลน์และภาพหนึ่งภาพมีค่าหนึ่งพันคำ หลังจากอ่านบทความนี้คุณจะมีความเข้าใจที่ลึกซึ้งยิ่งขึ้นเกี่ยวกับกระบวนการโทรของตัวกรองและตัวดักจับ
1. แนวคิดการออกแบบการรับรองความปลอดภัย
บางครั้งเมื่อเครือข่ายภายในและภายนอกเรียก APIs ข้อกำหนดด้านความปลอดภัยสำหรับข้อกำหนดที่แตกต่างกัน ในหลายกรณีข้อ จำกัด ต่าง ๆ ของเครือข่ายภายนอกที่เรียกว่า APIs ไม่จำเป็นในอินทราเน็ต อย่างไรก็ตามเมื่อปรับใช้เกตเวย์ APIs ที่จะถูกเรียกโดยเครือข่ายภายในและภายนอกอาจถูกนำไปใช้ร่วมกันเนื่องจากปัญหาต้นทุนและความซับซ้อน
เพื่อให้ตระหนักถึงความปลอดภัยของอินเทอร์เฟซที่เหลือสามารถทำได้ผ่านเฟรมเวิร์กที่ครบกำหนดเช่นความปลอดภัยของฤดูใบไม้ผลิหรือชิโร่
อย่างไรก็ตามเนื่องจากเฟรมเวิร์กความปลอดภัยมักจะซับซ้อน (ฉันนับความปลอดภัยในฤดูใบไม้ผลิมีโมดูลหลักประมาณ 11 โมดูลและปริมาณซอร์สโค้ดของชิโร่ก็ค่อนข้างน่าทึ่งเช่นกัน) ในเวลาเดียวกันอาจมีการแนะนำการกำหนดค่าที่ซับซ้อน (สามารถทำให้ผู้คนรู้สึกสนุกมากขึ้น) ซึ่งไม่เอื้อต่อการพัฒนาที่ยืดหยุ่นและรวดเร็วการปรับใช้และการตรวจสอบปัญหาของทีมขนาดเล็กและขนาดกลาง
หลายทีมสร้างล้อของตัวเองเพื่อให้ได้การรับรองความปลอดภัย ตัวอย่างการรับรองอย่างง่ายในบทความนี้หมายถึงทีมพัฒนาโรงงานในอดีตที่ฉันอยู่และสามารถพิจารณาบริการรับรองความปลอดภัยที่ใช้โทเค็น
แนวคิดการออกแบบทั่วไปมีดังนี้:
1. ปรับแต่งส่วนหัวคำขอ HTTP ทุกครั้งที่มีการเรียก API ค่าโทเค็นจะถูกส่งผ่านในส่วนหัวคำขอ
2. วางโทเค็นในแคช (เช่น Redis) และกำหนดเวลาหมดอายุของนโยบายที่แตกต่างกันตามธุรกิจและ API ที่แตกต่างกัน
3. โทเค็นสามารถตั้งค่าผู้ขายรายชื่อและบัญชีดำซึ่งสามารถ จำกัด ความถี่ของการโทร API อำนวยความสะดวกในการพัฒนาและการทดสอบอำนวยความสะดวกในการจัดการฉุกเฉินของความผิดปกติและแม้กระทั่งปิด API ชั่วคราว
4. การโทรเครือข่ายภายนอกจะต้องส่งโทเค็น โทเค็นสามารถเกี่ยวข้องกับผู้ใช้เช่นทุกครั้งที่คุณเปิดหน้าหรือเข้าสู่ระบบเพื่อสร้างส่วนหัวคำขอการเขียนโทเค็นหน้าตรวจสอบความถูกต้องของคุกกี้และโทเค็น ฯลฯ
มีสองแนวคิดในกรอบความปลอดภัยของฤดูใบไม้ผลิคือ การตรวจสอบ และ การอนุญาต การรับรองความถูกต้องหมายถึงผู้ใช้ที่สามารถเข้าถึงระบบในขณะที่การอนุญาตเป็นทรัพยากรที่ผู้ใช้สามารถเข้าถึงได้
เพื่อให้บรรลุข้อกำหนดการตรวจสอบความปลอดภัยที่เรียบง่ายข้างต้นคุณอาจต้องสร้างบริการโทเค็นอย่างอิสระเพื่อให้แน่ใจว่าโทเค็นนั้นไม่เหมือนใครทั่วโลก โมดูลที่อาจรวมถึงเครื่องกำเนิดไฟฟ้าโฟลว์แบบกำหนดเอง CRM การเข้ารหัสและถอดรหัสบันทึกสถิติ API แคช ฯลฯ แต่จริง ๆ แล้วพวกเขาถูกผูกไว้กับผู้ใช้ (CRM) บริการสาธารณะบางแห่งที่เกี่ยวข้องกับผู้ใช้เช่น SMS และบริการอีเมลที่เรามักใช้สามารถแก้ปัญหาการโทรความปลอดภัยผ่านกลไกโทเค็น
โดยสรุปการรับรองความปลอดภัยอย่างง่ายในบทความนี้จริง ๆ แล้วแตกต่างจากการรับรองความถูกต้องและการอนุญาตโดยกรอบความปลอดภัยของฤดูใบไม้ผลิ แน่นอนวิธีการรักษา "ความปลอดภัย" นี้ไม่ใช่เรื่องใหม่สำหรับมืออาชีพ แต่สามารถบล็อกผู้ใช้มือใหม่จำนวนมากจากภายนอก
2. ปรับแต่งตัวกรอง
เช่นเดียวกับสปริง MVC, สปริงบูตมีตัวกรอง servlet จำนวนมาก (ตัวกรอง) ที่จะใช้และจะเพิ่มตัวกรองที่ใช้กันทั่วไปบางส่วนเช่นตัวละคร filter (ใช้ในการจัดการปัญหาการเข้ารหัส), hiddinghttpmethodfilter (ฟังก์ชัน http ที่ซ่อนอยู่) ฟังก์ชั่นทั่วไปเช่นบันทึกการบันทึกการพิจารณาว่าจะเข้าสู่ระบบการตรวจสอบสิทธิ์ ฯลฯ
1. ส่วนหัวคำขอที่กำหนดเอง
มันง่ายมากเพิ่มส่วนหัวคำขอที่กำหนดเอง Authtoken ในส่วนหัวคำขอ:
@RequestMapping (value = "/getInfobyId", method = requestMethod.post) @apioperation ("ข้อมูลการสอบถามผลิตภัณฑ์ตามรหัสผลิตภัณฑ์") @apiimplicitparams ({@apiimplicitparam (paramtype = "ส่วนหัว", ชื่อ = "Authtoken" getGoodsByGoodSidResponse getGoodsByGoodSID (@Requestheader สตริง Authtoken, @requestbody getGoodsByGoodSidRequest คำขอ) {return _goodsapiservice.getGoodsbyGoodsid (คำขอ); } getGoodsbygoodsidฟิลด์ Authtoken ที่แก้ไขโดย @requestheader สามารถแสดงได้ภายใต้กรอบงานเช่น Swagger
หลังจากโทรคุณสามารถดูส่วนหัวคำขอตามเครื่องมือ HTTP ตัวอย่างในบทความนี้เป็น authtoken (แตกต่างจากโทเค็นของบางกรอบ):
หมายเหตุ: เครื่องมือ HTTPClient จำนวนมากรองรับส่วนหัวคำขอส่งสัญญาณแบบไดนามิกเช่น RestTemplate
2. ใช้ตัวกรอง
มีสามวิธีในอินเทอร์เฟซตัวกรองคือ init, dofilter และ destory เมื่อคุณเห็นชื่อคุณอาจจะรู้การใช้งานหลักของพวกเขา โดยปกติเราเพียงแค่ต้องประมวลผลคำขอ HTTP ภายในวิธี Dofilter:
แพ็คเกจ com.power.demo.controller.filter; นำเข้า com.power.demo.common.appconst; นำเข้า com.power.demo.common.bizresult; นำเข้า com.power.demo.service.contract.authtokenservice; org.springframework.beans.factory.annotation.autowired; นำเข้า org.springframework.stereotype.Component; นำเข้า Javax.servlet.*; นำเข้า Javax.servlet.http.httpservletRequest; @AutoWired AuthTokenService AuthTokenService; @Override โมฆะสาธารณะ init (FilterConfig var1) พ่น servletexception {} @Override โมฆะสาธารณะ dofilter (คำขอ ServletRequest, การตอบสนอง servletResponse, ห่วงโซ่ FilterChain) พ่น IOException, ServleTexception สตริงโทเค็น = req.getheader (appconst.auth_token); bizresult <string> bizresult = authtokenservice.powerCheck (โทเค็น); System.out.println (serializeutil.serialize (bizresult)); if (bizresult.getisok () == true) {powerlogger.info ("ตัวกรองโทเค็น auth ผ่าน"); chain.dofilter (คำขอ, การตอบกลับ); } else {โยน servletexception ใหม่ (bizresult.getMessage ()); }} @Override โมฆะสาธารณะทำลาย () {}} AuthTokenFilterโปรดทราบว่าจากมุมมองของลำดับชั้นที่เกิดขึ้นจริงสิ่งที่ส่วนใหญ่จะประมวลผลเลเยอร์การแสดงออกมากขึ้น ไม่แนะนำให้ใช้เลเยอร์การเข้าถึงข้อมูลโดยตรงในตัวกรอง แม้ว่าฉันจะเห็นรหัสดังกล่าวหลายครั้งในโครงการโบราณเก่า ๆ หลายปีหรือสองปีที่ผ่านมาและมีแบบอย่างในการเขียนด้วยวิธีนี้ในหนังสือ << สปริงภาคปฏิบัติ >>
3. บริการรับรอง
นี่คือตรรกะทางธุรกิจหลัก รหัสตัวอย่างเป็นเพียงวิธีง่ายๆในการเขียนความคิดและไม่ควรใช้อย่างง่ายดายในสภาพแวดล้อมการผลิต:
แพ็คเกจ com.power.demo.service.impl; นำเข้า com.power.demo.cache.powercachebuilder; นำเข้า com.power.demo.common.bizresult; นำเข้า com.power.demo.service.contract.authtokenservice; org.springframework.stereotype.component; นำเข้า org.springframework.util.stringutils; @componentpublic คลาส AuthtokenserviceImpl ใช้ AuthTokenservice / * * ตรวจสอบว่าโทเค็นส่วนหัวของคำขอนั้นถูกกฎหมาย * */ @Override สาธารณะ BizResult <String> PowerCheck (โทเค็นสตริง) {bizresult <String> bizresult = ใหม่ bizresult <> (จริง, "การตรวจสอบผ่าน"); System.out.println ("ค่าของโทเค็นคือ:" + โทเค็น); if (stringutils.isempty (โทเค็น) == true) {bizresult.setfail ("Authtoken ว่างเปล่า"); กลับ bizresult; } // การประมวลผล blacklist bizresult = checkforBidList (โทเค็น); if (bizresult.getisok () == false) {return bizresult; } // การประมวลผล bizresult = checkallowList (โทเค็น); if (bizresult.getisok () == false) {return bizresult; } string key = string.format ("power.authtokenservice.%s", โทเค็น); //cachebuilder.set(key, Token); //cachebuilder.set(key, token.touppercase ()); // ดึงสตริงมีอยู่จาก cache = cachebuilder.get (คีย์); if (stringUtils.isEmpty (มีอยู่) == true) {bizresult.setfail (string.format ("authtoken นี้:%s", โทเค็น)); กลับ bizresult; } // เปรียบเทียบว่าโทเค็นเป็นบูลีนเดียวกัน isequal = token.equals (มีอยู่); if (isequal == false) {bizresult.setfail (string.format ("uthtoken ผิดกฎหมาย:%s", โทเค็น)); กลับ bizresult; } // ทำสิ่งที่ส่งคืน bizresult; }} AuthTokenServiceImplคุณสามารถอ้างถึงบริการแคชที่คุณใช้ที่นี่ซึ่งเป็นบทสรุปของประสบการณ์ของฉันในโรงงานก่อนหน้า
4. ตัวกรองลงทะเบียน
มีสองวิธีในการเขียน:
(1) ใช้คำอธิบายประกอบ @WebFilter เพื่อระบุตัวกรอง
@order (1) @webfilter (urlpatterns = {"/api/v1/goods/*", "/api/v1/userinfo/*"}) คลาสสาธารณะ Authtokenfilter ใช้ตัวกรอง {การใช้คำอธิบายประกอบ @WebFilter คุณยังสามารถใช้คำอธิบายประกอบ @order ร่วมกับคำอธิบายประกอบ @order คำอธิบายประกอบ @order แสดงถึงลำดับของการกรอง ยิ่งค่าที่เล็กลงเท่าไหร่คุณก็ยิ่งดำเนินการมากขึ้นเท่านั้น ขนาดคำสั่งซื้อนี้มีประโยชน์เท่ากับการประมวลผลวงจรชีวิตของคำขอ HTTP ในระหว่างกระบวนการเขียนโปรแกรมของเรา แน่นอนหากไม่ได้ระบุคำสั่งซื้อลำดับของตัวกรองจะเรียกว่าตรงข้ามกับคำสั่งของตัวกรองที่เพิ่มขึ้นและการใช้งานตัวกรองเป็นรูปแบบห่วงโซ่ความรับผิดชอบ
ในที่สุดเพิ่มคำอธิบายประกอบ @ServletComponentScan ลงในคลาสเริ่มต้นเพื่อใช้ตัวกรองที่กำหนดเองตามปกติ
(2) ใช้ FilterRegistrationBean เพื่อปรับแต่งการลงทะเบียนตัวกรอง
บทความนี้ใช้การใช้งานครั้งที่สองเพื่อใช้การลงทะเบียนตัวกรองที่กำหนดเอง:
แพ็คเกจ com.power.demo.controller.filter; นำเข้า com.google.common.collect.lists; นำเข้า org.springframework.beans.factory.annotation.autoWired; นำเข้า org.springframework.boot. org.springframework.context.annotation.configuration; นำเข้า org.springframework.stereotype.component; นำเข้า java.util.list;@configuration@componentpublic คลาส restfilterconfig @Bean Public FilterRegistrationBean FilterRegistrationBean () {FilterRegistrationBean RegistrationBean = ใหม่ FilterRegistrationBean (); registrationbean.setFilter (ตัวกรอง); // set (fuzzy) รายการ URL ที่ตรงกัน <String> urlpatterns = lists.newarraylist (); urlpatterns.add ("/api/v1/goods/*"); urlpatterns.add ("/api/v1/userinfo/*"); registrationbean.seturlpatterns (urlpatterns); ลงทะเบียนเบียน SetOrder (1); registrationbean.setenabled (จริง); return registrationbean; }} RestFilterConfigโปรดให้ความสนใจเป็นพิเศษกับ urlpatterns แอตทริบิวต์ urlpatterns ระบุรูปแบบ URL ที่จะกรอง พารามิเตอร์นี้มีความสำคัญอย่างยิ่งสำหรับพื้นที่ตัวกรอง
ตัวกรองลงทะเบียนและเมื่อสปริงบู๊ตเริ่มต้นจะเพิ่มแอปพลิเคชันโซ่การโทรของตัวกรองโดยอัตโนมัติเมื่อตรวจพบถั่วด้วย javax.servlet.filter
เรียก API เพื่อลองใช้เอฟเฟกต์:
โดยปกติแล้วเราจะปรับแต่งการปรับปรุงการจัดการข้อยกเว้นแบบรวมทั่วโลก GlobalexceptionHandler ภายใต้การบูตฤดูใบไม้ผลิ (จะแตกต่างจากด้านบนเล็กน้อย)
จากการปฏิบัติของฉันข้อยกเว้นที่ถูกโยนลงไปในตัวกรองจะไม่ถูกจับและประมวลผลโดยการปรับปรุงการจัดการข้อยกเว้นที่ไม่ซ้ำกันทั่วโลก สิ่งนี้แตกต่างจาก Interceptor Inteceptor และ AOP Interceptor ที่กำหนดเองที่แนะนำในบทความถัดไป
ณ จุดนี้บริการตรวจสอบความปลอดภัยอย่างง่ายที่นำมาใช้ผ่านตัวกรองที่กำหนดเองจะเสร็จสิ้น
3. Interceptor ที่กำหนดเอง
1. ใช้ interceptor
สืบทอดอินเตอร์เฟส handlerInterceptor และใช้ interceptor วิธีการเชื่อมต่อมีดังนี้:
Prehandle จะดำเนินการก่อนการดำเนินการตามคำขอ
Postthandle เป็นจุดสิ้นสุดของการดำเนินการตามคำขอ
Aftercompletion จะดำเนินการหลังจากการแสดงผลของมุมมองเสร็จสมบูรณ์
แพ็คเกจ com.power.demo.controller.interceptor; นำเข้า com.power.demo.common.appconst; นำเข้า com.power.demo.common.bizresult; นำเข้า com.power.demo.service.contract.authtokenservice; org.springframework.beans.factory.annotation.autowired; นำเข้า org.springframework.stereotype.component; นำเข้า org.springframework.web.servlet.handlerinterceptor; นำเข้า org.springframework.web.servlet javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse;/ * * การตรวจสอบโทเค็น Token Interceptor * */ @ComponentPublic AuthTokenInterceptor / * * ดำเนินการก่อนการร้องขอการดำเนินการ * */ @Override บูลีนสาธารณะ prehandle (คำขอ httpservletRequest, การตอบสนอง httpservletResponse, ตัวจัดการวัตถุ) โยนข้อยกเว้น {boolean handleresult = false; String token = request.getheader (appconst.auth_token); bizresult <string> bizresult = authtokenservice.powerCheck (โทเค็น); System.out.println (serializeutil.serialize (bizresult)); handleresult = bizresult.getisok (); powerlogger.info ("auth token interceptor interceptor interceptor interceptor interceptor interceptor interceptor interceptor interceptor interceptor ผ่าน"); } else {โยนข้อยกเว้นใหม่ (bizresult.getMessage ()); } return handleresult; } / * * คำขอสิ้นสุดการดำเนินการ * * / @Override โมฆะสาธารณะ Postthandle (คำขอ httpservletRequest, การตอบสนอง httpservletResponse, ตัวจัดการวัตถุ, modelandview modelandview) โยนข้อยกเว้น {} / * * เรียกใช้งาน Handler, Exception Ex) โยนข้อยกเว้น {}} AuthTokenInterceptorในตัวอย่างเราเลือกที่จะดำเนินการตรวจสอบความปลอดภัยโทเค็นก่อนที่จะดำเนินการตามคำขอ
บริการตรวจสอบความถูกต้องคือ AuthTokenService ที่แนะนำในตัวกรองและเลเยอร์ตรรกะทางธุรกิจจะถูกนำมาใช้ซ้ำ
2. ลงทะเบียน interceptor
กำหนดคลาส InterceptorConfig ที่สืบทอดมาจาก WebMVCCONFIGURATIONSUPPORT และ WebMVCCONFigurerAdapter นั้นล้าสมัย
ฉีด AuthtokenInterceptor เป็นถั่ว URL และตัวกรองที่การสกัดกั้นการสกัดกั้นการตั้งค่าอื่น ๆ นั้นคล้ายกันมาก:
แพ็คเกจ com.power.demo.controller.interceptor; นำเข้า com.google.common.collect.lists; นำเข้า org.springframework.context.annotation.bean; นำเข้า org.springframework.context.annotation.configuration; org.springframework.web.servlet.config.annotation.defaultservlethandlerconfigurer; นำเข้า org.springframework.web.servlet.config.annotation.interceptorregistry; org.springframework.web.servlet.config.annotation.webmvcconfigurationsupport; นำเข้า java.util.list;@configuration@componentpublic class interceptorconfig ขยาย webmvcconfigurationsupport "/favicon.ico"; /*** พบว่าหาก WebMVCCONFIGURATIONSUPPORT ได้รับการสืบทอดเนื้อหาที่เกี่ยวข้องที่กำหนดค่าใน YML จะไม่ถูกต้อง * *@Param Registry */@Override โมฆะสาธารณะ addResourceHandlers (ResourceHandlerRegistry Registry) {registry.addresourceHandler ("/") addResourceLocations ("/**"); registry.addresourceHandler ("/static/**"). addResourceLocations ("classpath:/static/"); } / *** กำหนดค่าการประมวลผล servlet* / @Override โมฆะสาธารณะ configureDefaultServleThandling (defaultServleThandlerConfigurer กำหนดค่า) {configurer.enable (); } @Override โมฆะสาธารณะ AddInterceptors (InterceptorRegistry Registry) {// set (fuzzy) รายการ URL ที่ตรงกัน <String> urlPatterns = lists.newarrayList (); urlpatterns.add ("/api/v1/goods/*"); urlpatterns.add ("/api/v1/userinfo/*"); registry.addinterceptor (AuthTokenInterceptor ()). addPathPatterns (urlpatterns) .excludepathpatterns (favicon_url); super.addinterceptors (รีจิสทรี); } // เขียน interceptor เป็นถั่วลงในการกำหนดค่า @Bean AuthTokenInterceptor AuthTokenInterceptor () {ส่งคืน AuthTokenInterceptor ใหม่ (); }} interceptorConfigหลังจากเริ่มแอปพลิเคชันคุณจะเห็นผลของการสกัดกั้นการสกัดกั้นโดยเรียกอินเทอร์เฟซ Global Unified Exception Management GlobalexceptionHandler จัดการข้อยกเว้นต่อไปนี้หลังจากจับพวกเขา:
มันเกือบจะเหมือนกับข้อความแสดงข้อผิดพลาดหลักที่แสดงโดยตัวกรอง แต่ข้อมูลสแต็กนั้นสมบูรณ์ยิ่งขึ้น
4. ความแตกต่างระหว่างตัวกรองและตัวดักจับ
ความแตกต่างหลักมีดังนี้:
1. interceptors ส่วนใหญ่ขึ้นอยู่กับกลไกการสะท้อนของ Java ในขณะที่ตัวกรองจะขึ้นอยู่กับการเรียกกลับฟังก์ชั่น
2. interceptor ไม่ได้ขึ้นอยู่กับคอนเทนเนอร์ servlet ตัวกรองขึ้นอยู่กับคอนเทนเนอร์ servlet
3. ตัวดักจับสามารถทำงานตามคำขอการดำเนินการเท่านั้นในขณะที่ตัวกรองสามารถทำงานได้ตามคำขอเกือบทั้งหมด
4. ตัวดักจับสามารถเข้าถึงวัตถุในบริบทการกระทำและสแต็กค่า แต่ตัวกรองไม่สามารถเข้าถึงได้
5. ในช่วงวงจรชีวิตของการกระทำการดักจับสามารถเรียกได้หลายครั้งในขณะที่ตัวกรองสามารถเรียกได้เพียงครั้งเดียวเมื่อคอนเทนเนอร์เริ่มต้น
บางบทความที่ฉันอ้างถึงกล่าวว่า "ตัวดักจับสามารถรับถั่วหลายชนิดในคอนเทนเนอร์ IOC แต่ตัวกรองไม่สามารถทำได้นี่เป็นสิ่งสำคัญมากการฉีดบริการลงในตัวดักสามารถเรียกตรรกะทางธุรกิจได้" หลังจากการตรวจสอบจริงสิ่งนี้ผิด
หมายเหตุ: เวลาทริกเกอร์ของตัวกรองอยู่หลังจากคอนเทนเนอร์และก่อนหน้า servlet ดังนั้นพารามิเตอร์รายการของตัวกรอง dofilter (คำขอ servletrequest, การตอบสนอง servletresponse, โซ่ฟิลเตอร์เชน) เป็น servletrequest รูปต่อไปนี้สามารถให้ความเข้าใจที่เข้าใจง่ายมากขึ้นเกี่ยวกับเวลาในการดำเนินการของตัวกรองและ interceptor:
คำขอที่ส่งผ่านโดย Dispatcherservlet เท่านั้นจะตามด้วยห่วงโซ่การดักจับ คำขอ servlet ที่กำหนดเองจะไม่ถูกดักจับ ตัวอย่างเช่นที่อยู่ servlet ที่กำหนดเองของเรา http: // localhost: 9090/testservlet จะไม่ถูกสกัดกั้นโดย interceptor แต่ไม่ว่าจะเป็นของเซิร์ฟเล็ตตัวกรองจะถูกดำเนินการตราบใดที่มันเป็นไปตามกฎของตัวกรองตัวกรอง
จากการวิเคราะห์ข้างต้นการทำความเข้าใจหลักการจะง่ายแม้ตัวกรอง ASP.NET จะเหมือนกัน
ปัญหา: บรรลุการรับรองความปลอดภัยที่ยืดหยุ่นมากขึ้น
ภายใต้เว็บ Java ผ่านตัวกรองตัวกรองที่กำหนดเองหรือตัวดักจับการตรวจสอบความปลอดภัยของ API ที่จับคู่ที่เฉพาะเจาะจงสามารถทำได้เช่นการจับคู่ API ทั้งหมดการจับคู่ API หนึ่งหรือหลายตัว ฯลฯ แต่บางครั้งรูปแบบการจับคู่นี้ค่อนข้างไม่เป็นมิตรกับนักพัฒนา
เราสามารถอ้างถึงความปลอดภัยของฤดูใบไม้ผลิเพื่อให้ได้ฟังก์ชั่นที่มีประสิทธิภาพผ่านคำอธิบายประกอบ + Spel
ตัวอย่างเช่นใน ASP.NET เรามักจะใช้คุณสมบัติที่ได้รับอนุญาตซึ่งสามารถเพิ่มเข้าไปในคลาสหรือนำไปใช้กับวิธีการและสามารถควบคุมการตรวจสอบความปลอดภัยได้มากขึ้นและยืดหยุ่นได้มากขึ้น
เราไม่ได้เลือกความปลอดภัยในฤดูใบไม้ผลิดังนั้นเราจึงสามารถใช้การรับรองความปลอดภัยที่ยืดหยุ่นคล้ายกับที่ได้รับอนุญาต เทคโนโลยีการใช้งานหลักคือ AOP ที่เราคุ้นเคย
ความรู้พื้นฐานในการบรรลุการสกัดกั้นที่ยืดหยุ่นมากขึ้นด้วยวิธี AOP จะไม่ถูกกล่าวถึงในบทความนี้ หัวข้อเพิ่มเติมเกี่ยวกับ AOP จะถูกแชร์ในบทความถัดไป
สรุป
ข้างต้นคือสิ่งที่บรรณาธิการแนะนำให้คุณรู้จัก Spring Boot ใช้ตัวกรองและตัวดักจับเพื่อให้ได้การรับรองความถูกต้องที่เรียบง่ายและปลอดภัยของอินเตอร์เฟส REST ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!