SpringSecurity本质是一个过滤器链 FilterSecurityInterceptor 是一个方法级的权限过滤器,基本位于过滤器的最底部 UsernamePasswordAuthenticationFilter 对/login的post请求做拦截,验证表单中用户名,密码。
过滤器如何进行加载? 1 使用SpringSecurity配置过滤器 DelegatingFilterProxy
两个重要接口 UserDetailsService 查询用户名密码过程 创建继承UsernamePasswordAuthenticationFilter 重写三个方法 创建类实现UserDetailService,编写查询数据库过程,返回User对象。 这个User对象是安全框架提供对象。 PasswordEncoder 数据加密接口
登录配置方式
1
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数据库查询
@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();
}
}