HttpSecurity,WebSecurity和AuthenticationManagerBuilder

时间:2014-04-10 20:49:20

标签: java spring spring-mvc spring-security

有人可以解释何时覆盖configure(HttpSecurity)configure(WebSecurity)configure(AuthenticationManagerBuilder)

2 个答案:

答案 0 :(得分:94)

configure(AuthenticationManagerBuilder)用于通过允许轻松添加AuthenticationProviders来建立身份验证机制:以下内容使用内置的“用户”和“管理员”登录来定义内存中身份验证。

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

,请参阅以下链接

答案 1 :(得分:0)

WebSecurity ignoring()方法的常规用法省略了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允​​许Spring忽略/resources/**/publics/**。因此,HttpSecurity中的.antMatchers("/publics/**").hasRole("USER")未考虑的

  

这将完全忽略安全性过滤器链中的请求模式。   请注意,与此路径匹配的所有内容都不会应用身份验证或授权服务,并且可以自由访问。

configure(HttpSecurity)允许基于选择匹配在资源级别上配置基于Web的安全性-例如下面的示例将以/admin/开头的URL限制为具有 ADMIN角色的用户,并声明需要成功验证其他所有URL。

configure(WebSecurity)用于影响全局安全性的配置设置(忽略资源,设置调试模式,通过实现自定义防火墙定义拒绝请求)。例如,以下方法将导致出于身份验证目的而忽略以/resources/开头的所有请求。

AuthenticationManagerBuilder
extends AbstractConfiguredSecurityBuilder<AuthenticationManager,AuthenticationManagerBuilder>
implements ProviderManagerBuilder<AuthenticationManagerBuilder>

SecurityBuilder用于创建AuthenticationManager。允许轻松构建内存身份验证,LDAP身份验证,基于JDBC的身份验证,添加UserDetailsS​​ervice和添加AuthenticationProvider的

@Override
     protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("user").password("password").roles("USER"); 
        auth.userDetailsService(customUserDetailService).passwordEncoder(new BCryptPasswordEncoder());
     }