ความปลอดภัยในฤดูใบไม้ผลิจดจำหลักการพื้นฐานของฉัน:
เมื่อเข้าสู่ระบบการร้องขอจะถูกส่งไปยังตัวกรอง USERNAMEPASSWORDATHENTICATIONFILTER เมื่อตัวกรองได้รับการรับรองความถูกต้องแล้ว RememberMeservice จะถูกเรียกซึ่งจะสร้างโทเค็นเขียนโทเค็นลงในคุกกี้เบราว์เซอร์ ในขณะเดียวกันก็มี tokenrepository ใน RememberMeservice ซึ่งเขียนโทเค็นและข้อมูลผู้ใช้ไปยังฐานข้อมูล ด้วยวิธีนี้เมื่อผู้ใช้เข้าถึงระบบอีกครั้งและเข้าถึงอินเทอร์เฟซมันจะผ่านตัวกรอง RememberMeauthenticationFilter มันจะอ่านโทเค็นในคุกกี้และส่งมอบให้กับ Rememberservice Rememberservice จะใช้ tokenrepository เพื่อตรวจสอบว่ามีบันทึกจากฐานข้อมูลตามโทเค็นหรือไม่ หากมีการบันทึกชื่อผู้ใช้จะถูกนำออกมาจากนั้นโทรหาผู้ใช้งาน Service เพื่อรับข้อมูลผู้ใช้ตามชื่อผู้ใช้แล้วใส่ไว้ใน SecurityContext
RememberMeAuthenticationFilter ตรวจสอบตำแหน่งตัวกรองที่สองสุดท้ายของห่วงโซ่ตัวกรองในการรักษาความปลอดภัยในฤดูใบไม้ผลิ เมื่อไม่มีตัวกรองการรับรองความถูกต้องอื่น ๆ ที่สามารถตรวจสอบความถูกต้องได้สำเร็จจะมีการเรียกร้องให้มีการตรวจสอบความถูกต้อง
ทำให้สำเร็จ:
1. เพิ่ม <input type="checkbox" name="remember-me" value="true"/> ในแบบฟอร์มการเข้าสู่ระบบ Springsecurity กำหนดค่าคงที่ในคลาส SpringSessionRememberMeServices
2. ตามแผนภาพแผนผังข้างต้นคุณต้องกำหนดค่า tokenrepository และเก็บโทเค็นที่สร้างขึ้นไว้ในฐานข้อมูล นี่คือการกำหนดค่าการกำหนดค่าถั่ว
3. กำหนดค่าในการกำหนดค่า
4. เพิ่มเวลาเข้าสู่ระบบอัตโนมัติในเบราว์เซอร์เพื่อให้ฉันกำหนดค่าได้
// โปรดจำไว้ว่าฉันจะกำหนดค่า INT ส่วนตัวจำ meseconds = 10; แพ็คเกจ qihuo com.imooc.s@configuration // นี่คือการกำหนดค่าระดับสาธารณะคลาส BrowsersecurityConfigFig ขยาย websecurityConfigureradapter {// อ่านการกำหนดค่าหน้าเข้าสู่ระบบของการกำหนดค่าผู้ใช้ // โปรเซสเซอร์ที่กำหนดเองหลังจากเข้าสู่ระบบที่ประสบความสำเร็จ @autowired การรับรองความถูกต้องส่วนตัว // โปรเซสเซอร์ที่กำหนดเองหลังจากการรับรองความถูกต้องที่ล้มเหลว @autowired ส่วนตัว AuthenticationFailureHandler ImoocauthenticationFailureHandler; // แหล่งข้อมูล @autowired DataSource DataSource; @AutoWired Private UserDetailsService UserDetailsService; // โปรดทราบว่าเป็น org.springframework.security.crypto.password.passwordencoder @bean รหัสผ่านสาธารณะรหัสผ่าน PasswordDenCoder () {// bcryptpasswordencoder ใช้รหัสผ่านคืน BCRYPTASSWORDENCODER (); } / *** จำการกำหนดค่า tokenrepository ของฉันดำเนินการหลังจากเข้าสู่ระบบได้สำเร็จ* หลังจากเข้าสู่ระบบได้สำเร็จบันทึกโทเค็นในฐานข้อมูล* @description: จำการกำหนดค่า tokenrepository ของฉัน* @param @return PublicententTokenRepository PresententTokenRepository () {JDBCTOKENREPOSITORITIONIMPL JDBCTOKENREPOSITORY = JDBCTOKENTOKENREPOSITERITIONITIONITIONITIONITIONITIONITIONITORITION (); jdbctokenrepository.setDataSource (DataSource); // ตารางที่สอดคล้องกันจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อเริ่มต้น คุณสามารถเรียกใช้สคริปต์ create_table_sql ด้วยตัวเองใน jdbctokenrepositoryimpl เพื่อสร้างตาราง jdbctokenrepository.setCreateteTableOnStartup (จริง); ส่งคืน Jdbctokenrepository; } // เวอร์ชัน 2: หน้าเข้าสู่ระบบที่กำหนดค่าได้ @Override Void Protected Void Configure (httpsecurity http) โยนข้อยกเว้น {// // การตรวจสอบรหัสตัวกรอง ValidateCodeFilter ValidateCodeFilter = ใหม่ ValidateCodeFilter (); // ใช้การจัดการข้อผิดพลาดของคุณเองในตัวกรองรหัสการตรวจสอบ ValidateCodeFilter.setAuthenticationFailureHandler (ImoocauthenticationFailureHandler); // กำหนดค่ารหัสการตรวจสอบตัวกรอง URL ValidateCodeFilter.SetSecurityProperties (SecurityProperties); ValidateCodeFilter.AfterPropertIesset (); // ใช้การล็อกอินแบบฟอร์มการกระโดดอินเตอร์เฟสที่ต้องการการตรวจสอบความปลอดภัย, ความปลอดภัย = การรับรองความถูกต้อง + การอนุญาต //http.httpbasic () // นี่คือการรับรองความถูกต้องของกล่องป๊อปอัพเริ่มต้น // http // โหลดตัวกรองการตรวจสอบตัวกรอง log.addfilter configuration.formlogin () .loginpage ("/การรับรองความถูกต้อง/ต้องการ") // การประมวลผลการรับรองความถูกต้องของผู้ใช้ BrowsersecurityConituration // ตัวกรองเข้าสู่ระบบ USERNAMEPASSWORDAUTHENTICATIONFILTER URL เข้าสู่ระบบเริ่มต้นคือ "/เข้าสู่ระบบ" ซึ่งสามารถเปลี่ยนแปลงได้ที่นี่ .SuccessHandler (ImoocauthenticationsuccessHandler) // การรับรองความถูกต้องที่กำหนดเอง postprocessor.failurehandler (iMoocauthenticationFailureHandler) // การประมวลผลหลังจากการเข้าสู่ระบบล้มเหลวและ () // จำการกำหนดค่าที่เกี่ยวข้อง TokenvaliditySeconds (SecurityProperties.getBrowser (). getRememberMeseconds ()) // จำไว้ว่าวินาที UserDetailsService (UserDetailsService) // จำไว้หลังจากที่ฉันประสบความสำเร็จ SecurityProperties.getBrowser (). getLoginPage (): หน้าเข้าสู่ระบบที่กำหนดค่าของผู้ใช้ ANTMATCHERS ("/การรับรองความถูกต้อง/ต้องการ", SecurityProperties.getBrowser (). getLoginPage (), // บันทึกหน้าเข้าสู่ระบบ //anyrequest.authenticated () // การตรวจสอบสิทธิ์การตรวจสอบความถูกต้องเป็นสิ่งจำเป็นและ () .csrf (). disable () // ปิดการป้องกัน CSRF; }} curity.browser;เนื่องจากคุณต้องการจัดการกับฐานข้อมูลคุณต้องฉีดแหล่งข้อมูล: Application.properties
Spring.datasource.driver-class-name = com.mysql.jdbc.driverspring.datasource.url = jdbc: mysql: //127.0.0.1: 3306/imooc-demospring.datasource.username = rootspring.datasource.datasource.datasource
เริ่มแอปพลิเคชันเข้าถึง LocalHost: 8080/ผู้ใช้และจำเป็นต้องเข้าสู่ระบบ
เข้าสู่ระบบสำเร็จ:
ฐานข้อมูล: สร้างตาราง sterventent_logins และบันทึกชิ้นส่วนข้อมูล
หยุดบริการและเริ่มต้นอีกครั้ง (แสดงความคิดเห็น jdbcTokenRepository.setCreateTableOnStartup(true); ) เนื่องจากข้อมูลการเข้าสู่ระบบของผู้ใช้ของเราอยู่ในเซสชันหลังจากรีสตาร์ทบริการคุณควรรีบูตหน้าเข้าสู่ระบบ
คำขอส่วนหัว:
จนถึงตอนนี้ความจำพื้นฐานได้ทำไปแล้ว
รหัสที่สมบูรณ์ถูกวางไว้ใน gitHub: https://github.com/lhy1234/spring-security
สรุป
ข้างต้นคือบริการสปริงรักษาความปลอดภัยการก่อสร้างที่บรรณาธิการแนะนำให้คุณรู้จัก จำฉันได้ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!