ทุกคนสามารถอธิบายได้ว่าเมื่อมีการแทนที่configure(HttpSecurity)
, configure(WebSecurity)
และconfigure(AuthenticationManagerBuilder)
?
ทุกคนสามารถอธิบายได้ว่าเมื่อมีการแทนที่configure(HttpSecurity)
, configure(WebSecurity)
และconfigure(AuthenticationManagerBuilder)
?
คำตอบ:
กำหนดค่า (AuthenticationManagerBuilder)ใช้เพื่อสร้างกลไกการพิสูจน์ตัวตนโดยอนุญาตให้เพิ่ม AuthenticationProviders ได้อย่างง่ายดายเช่นต่อไปนี้กำหนดการพิสูจน์ตัวตนในหน่วยความจำด้วยการเข้าสู่ระบบ 'ผู้ใช้' และ 'ผู้ดูแลระบบ' ในตัว
public void configure(AuthenticationManagerBuilder auth) {
auth
.inMemoryAuthentication()
.withUser("user")
.password("password")
.roles("USER")
.and()
.withUser("admin")
.password("password")
.roles("ADMIN","USER");
}
กำหนดค่า (HttpSecurity)อนุญาตการกำหนดค่าการรักษาความปลอดภัยบนเว็บในระดับทรัพยากรตามการจับคู่การเลือกเช่นตัวอย่างด้านล่าง จำกัด URL ที่ขึ้นต้นด้วย / admin / สำหรับผู้ใช้ที่มีบทบาท ADMIN และประกาศว่าต้องเป็น URL อื่น ตรวจสอบสิทธิ์เรียบร้อยแล้ว
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
}
กำหนดค่า (WebSecurity)ใช้สำหรับการตั้งค่าคอนฟิกูเรชันที่ส่งผลต่อความปลอดภัยทั่วโลก (ละเว้นรีซอร์สตั้งค่าโหมดดีบักปฏิเสธคำขอโดยใช้ข้อกำหนดไฟร์วอลล์ที่กำหนดเอง) ตัวอย่างเช่นวิธีการต่อไปนี้จะทำให้คำร้องขอใด ๆ ที่ขึ้นต้นด้วย / resources / ถูกละเว้นเพื่อวัตถุประสงค์ในการพิสูจน์ตัวตน
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/resources/**");
}
คุณสามารถอ้างอิงลิงค์ต่อไปนี้สำหรับข้อมูลเพิ่มเติมSpring Security Java Config Preview: Web Security
การใช้ignoring()
วิธีWebSecurity โดยทั่วไปจะละเว้น Spring Securityและจะไม่มีฟีเจอร์ใด ๆ ของ Spring Security WebSecurity ขึ้นอยู่กับ HttpSecurity
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/resources/**")
.antMatchers("/publics/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/publics/**").hasRole("USER") // no effect
.anyRequest().authenticated();
}
WebSecurity ในตัวอย่างข้างต้นจะช่วยให้ฤดูใบไม้ผลิจะไม่สนใจและ/resources/**
/publics/**
ดังนั้น.antMatchers("/publics/**").hasRole("USER")
ใน HttpSecurity จึงไม่ได้รับการพิจารณา
การดำเนินการนี้จะละเว้นรูปแบบคำขอจากห่วงโซ่ตัวกรองความปลอดภัยทั้งหมด โปรดทราบว่าสิ่งใดก็ตามที่ตรงกับเส้นทางนี้จะไม่มีการใช้บริการการตรวจสอบสิทธิ์หรือการอนุญาตและจะเข้าถึงได้อย่างอิสระ
configure(HttpSecurity)
อนุญาตให้กำหนดค่าการรักษาความปลอดภัยบนเว็บที่ระดับทรัพยากรตามการจับคู่การเลือกเช่นตัวอย่างด้านล่าง จำกัด URL ที่ขึ้นต้นด้วย/admin/
ผู้ใช้ที่มีบทบาท ADMINและประกาศว่า URL อื่น ๆ ต้องได้รับการตรวจสอบสิทธิ์สำเร็จ
configure(WebSecurity)
ใช้สำหรับการตั้งค่าคอนฟิกูเรชันที่ส่งผลต่อความปลอดภัยทั่วโลก (ละเว้นทรัพยากรตั้งค่าโหมดดีบักปฏิเสธคำขอโดยใช้ข้อกำหนดไฟร์วอลล์ที่กำหนดเอง ตัวอย่างเช่นวิธีการต่อไปนี้จะทำให้คำขอใด ๆ ที่ขึ้นต้นด้วย/resources/
ถูกละเว้นเพื่อวัตถุประสงค์ในการตรวจสอบสิทธิ์
AuthenticationManagerBuilder
extends AbstractConfiguredSecurityBuilder<AuthenticationManager,AuthenticationManagerBuilder>
implements ProviderManagerBuilder<AuthenticationManagerBuilder>
SecurityBuilder ใช้ในการสร้างAuthenticationManager
ไฟล์. ช่วยให้ง่ายในการสร้างการตรวจสอบหน่วยความจำการตรวจสอบ LDAP รับรองความถูกต้องตาม JDBC เพิ่ม UserDetailsService และการเพิ่ม AuthenticationProvider
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("user").password("password").roles("USER");
auth.userDetailsService(customUserDetailService).passwordEncoder(new BCryptPasswordEncoder());
}
http.authorizeUrls()
นี้อาจจะถูกเปลี่ยนชื่อไปhttp.authorizeRequests()
บ้าง