spring security——自定义security配置实现验证

Spring Security 应用级别的安全主要包含两个主要部分,即登录认证(Authentication)和访问授权(Authorization)。文章记录一下登录认证的实现方式

自定义security配置是要继承 WebSecurityConfigurerAdapter 的配置类,重写自己的Security 配置。

@EnableWebSecurity 启动security配置。

* 使用 @Autowired注入自己定义的userDetailsService

* 重写configure(AuthenticationManagerBuilder auth)方法,配置使用自定义的userDetailsService和PasswordEncoder 进行验证逻辑和加解密。

* 这里还有一个configure(HttpSecurity http)方法,是配置权限的。

 http.authorizeRequests()方法返回一个ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry的实例,这个实例有众多子方法:

                   .antMatchers("/").permitAll() 表示"/" 路径不需要权限可以任意访问;

                   .anyRequest().authenticated() 表示其他没匹配到的路径是需要权限的;

                  .and() 方法返回HttpSecurity 对象本身,即这个方法后开始新的配置

 

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;//自定义的实现类

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
        // 首页和登录页面
        .antMatchers("/").permitAll()
        // 其他所有请求需要身份认证
        .anyRequest().authenticated()
        // 配置登录页面
        .and().formLogin().loginProcessingUrl("/login");
    }
    
    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        // 使用自定义的userDetailsService验证
       auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }
    


    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
   
}

 

你可能感兴趣的:(Spring,Security)