SpringSecurity笔记

154 阅读1分钟

SpringSecurity本质是一个过滤器链 FilterSecurityInterceptor 是一个方法级的权限过滤器,基本位于过滤器的最底部 UsernamePasswordAuthenticationFilter 对/login的post请求做拦截,验证表单中用户名,密码。

过滤器如何进行加载? 1 使用SpringSecurity配置过滤器 DelegatingFilterProxy

两个重要接口 UserDetailsService 查询用户名密码过程 创建继承UsernamePasswordAuthenticationFilter 重写三个方法 创建类实现UserDetailService,编写查询数据库过程,返回User对象。 这个User对象是安全框架提供对象。 PasswordEncoder 数据加密接口

登录配置方式 1 image.png 2 配置类 配置类继承 WebSecurityConfigurerAdapter 可通过BCryptPasswordEncoder进行加密

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        BCryptPasswordEncoder passwordEncoder=new BCryptPasswordEncoder();
        String password = passwordEncoder.encode("test");
        auth.inMemoryAuthentication().withUser("test").password(password).roles("admin");
    }
    @Bean
    PasswordEncoder password(){
        return new BCryptPasswordEncoder();
    }
}

3数据库查询 image.png

@Service("userDetailsService")
public class MyUserDetailsService implements UserDetailsService {
    @Override
    public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
        List<GrantedAuthority> auths= AuthorityUtils.commaSeparatedStringToAuthorityList("role");
        return new User("test",new BCryptPasswordEncoder().encode("test"),auths);
    }
}
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private UserDetailsService userDetailsService;
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
    }
    @Bean
    PasswordEncoder password(){
        return new BCryptPasswordEncoder();
    }
}