HttpSecurity, WebSecurity and AuthenticationManagerBuilder
谁能解释一下何时覆盖 , 和 ?configure(HttpSecurity)
configure(WebSecurity)
configure(AuthenticationManagerBuilder)
谁能解释一下何时覆盖 , 和 ?configure(HttpSecurity)
configure(WebSecurity)
configure(AuthenticationManagerBuilder)
configure(AuthenticationManagerBuilder)用于通过允许轻松添加身份验证提供程序来建立身份验证机制:例如,以下内容定义了内置的“用户”和“管理员”登录的内存中身份验证。
public void configure(AuthenticationManagerBuilder auth) {
auth
.inMemoryAuthentication()
.withUser("user")
.password("password")
.roles("USER")
.and()
.withUser("admin")
.password("password")
.roles("ADMIN","USER");
}
configure(HttpSecurity) 允许根据选择匹配在资源级别配置基于 Web 的安全性 - 例如,下面的示例将以 /admin/ 开头的 URL 限制为具有 ADMIN 角色的用户,并声明任何其他 URL 都需要成功进行身份验证。
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
}
configure(WebSecurity) 用于影响全局安全性的配置设置(忽略资源、设置调试模式、通过实现自定义防火墙定义拒绝请求)。例如,出于身份验证目的,以下方法将导致忽略以 /resources/ 开头的任何请求。
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/resources/**");
}
您可以参考以下链接以获取更多信息 Spring Security Java Config Preview: Web Security
WebSecurity方法的一般使用省略了Spring Security,并且Spring Security的任何功能都不可用。WebSecurity基于HttpSecurity之上。ignoring()
@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让Spring忽略和。因此,在HttpSecurity中是未经考虑的。/resources/**
/publics/**
.antMatchers("/publics/**").hasRole("USER")
这将完全省略安全筛选器链中的请求模式。请注意,与此路径匹配的任何内容都将不应用身份验证或授权服务,并且可以自由访问。
configure(HttpSecurity)
允许根据选择匹配在资源级别配置基于 Web 的安全性 - 例如,下面的示例将开头的 URL 限制为具有 ADMIN 角色的用户,并声明任何其他 URL 都需要成功进行身份验证。/admin/
configure(WebSecurity)
用于影响全局安全性的配置设置(忽略资源、设置调试模式、通过实现自定义防火墙定义拒绝请求)。例如,以下方法将导致出于身份验证目的忽略以 开头的任何请求。/resources/
AuthenticationManagerBuilder
extends AbstractConfiguredSecurityBuilder<AuthenticationManager,AuthenticationManagerBuilder>
implements ProviderManagerBuilder<AuthenticationManagerBuilder>
用于创建 .允许轻松构建内存身份验证、LDAP 身份验证、基于 JDBC 的身份验证、添加 UserDetailsService 以及添加 AuthenticationProvider。AuthenticationManager
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("user").password("password").roles("USER");
auth.userDetailsService(customUserDetailService).passwordEncoder(new BCryptPasswordEncoder());
}