Bất cứ ai có thể giải thích khi nào cần ghi đè configure(HttpSecurity)
, configure(WebSecurity)
và configure(AuthenticationManagerBuilder)
?
Bất cứ ai có thể giải thích khi nào cần ghi đè configure(HttpSecurity)
, configure(WebSecurity)
và configure(AuthenticationManagerBuilder)
?
Câu trả lời:
config (AuthenticationManagerBuilder) được sử dụng để thiết lập cơ chế xác thực bằng cách cho phép dễ dàng thêm AuthenticationProviders: ví dụ: Phần sau định nghĩa xác thực trong bộ nhớ với thông tin đăng nhập 'người dùng' và 'quản trị viên' được tích hợp sẵn.
public void configure(AuthenticationManagerBuilder auth) {
auth
.inMemoryAuthentication()
.withUser("user")
.password("password")
.roles("USER")
.and()
.withUser("admin")
.password("password")
.roles("ADMIN","USER");
}
cấu hình (HttpSecurity) cho phép cấu hình bảo mật dựa trên web ở cấp tài nguyên, dựa trên kết hợp lựa chọn - ví dụ: Ví dụ dưới đây hạn chế các URL bắt đầu bằng / admin / đối với người dùng có vai trò QUẢN TRỊ và tuyên bố rằng bất kỳ URL nào khác cần phải đã xác thực thành công.
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
}
config (WebSecurity) được sử dụng cho các cài đặt cấu hình ảnh hưởng đến bảo mật toàn cầu (bỏ qua tài nguyên, đặt chế độ gỡ lỗi, từ chối yêu cầu bằng cách triển khai định nghĩa tường lửa tùy chỉnh). Ví dụ: phương pháp sau sẽ khiến bất kỳ yêu cầu nào bắt đầu bằng / resources / bị bỏ qua cho mục đích xác thực.
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/resources/**");
}
Bạn có thể tham khảo liên kết sau để biết thêm thông tin Spring Security Java Config Preview: Web Security
Việc sử dụng chung ignoring()
phương pháp WebSecurity bỏ qua Spring Security và không có tính năng nào của Spring Security sẽ khả dụng. WebSecurity dựa trên 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 trong ví dụ trên cho phép Spring bỏ qua /resources/**
và /publics/**
. Do đó, .antMatchers("/publics/**").hasRole("USER")
trong HttpSecurity là unconsidered .
Điều này sẽ loại bỏ hoàn toàn mẫu yêu cầu khỏi chuỗi bộ lọc bảo mật. Lưu ý rằng bất kỳ thứ gì khớp với đường dẫn này sau đó sẽ không có dịch vụ xác thực hoặc ủy quyền được áp dụng và sẽ có thể truy cập miễn phí.
configure(HttpSecurity)
cho phép cấu hình bảo mật dựa trên web ở cấp tài nguyên , dựa trên kết quả phù hợp lựa chọn - ví dụ: Ví dụ dưới đây hạn chế các URL bắt đầu với /admin/
người dùng có vai trò QUẢN TRỊ và tuyên bố rằng bất kỳ URL nào khác cần được xác thực thành công.
configure(WebSecurity)
được sử dụng cho các cài đặt cấu hình ảnh hưởng đến bảo mật toàn cầu (bỏ qua tài nguyên, đặt chế độ gỡ lỗi, từ chối yêu cầu bằng cách triển khai định nghĩa tường lửa tùy chỉnh). Ví dụ: phương pháp sau sẽ khiến mọi yêu cầu bắt đầu bằng /resources/
bị bỏ qua cho mục đích xác thực .
AuthenticationManagerBuilder
extends AbstractConfiguredSecurityBuilder<AuthenticationManager,AuthenticationManagerBuilder>
implements ProviderManagerBuilder<AuthenticationManagerBuilder>
SecurityBuilder được sử dụng để tạo AuthenticationManager
. Cho phép dễ dàng xây dựng trong xác thực bộ nhớ, xác thực LDAP, xác thực dựa trên JDBC, thêm UserDetailsService và thêm AuthenticationProvider's .
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("user").password("password").roles("USER");
auth.userDetailsService(customUserDetailService).passwordEncoder(new BCryptPasswordEncoder());
}
http.authorizeUrls()
, có thể nó đã được đổi tên thànhhttp.authorizeRequests()
cách đây không lâu.