1,添加maven依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>2.3.4.RELEASE</version>
</dependency>

2,编写springSecurity配置类 重写Configure方法

@Configuration
public class SecurityConfigure extends WebSecurityConfigurerAdapter {
@Bean(name = "bCryptPasswordEncoder")
public PasswordEncoder bCryptPasswordEncoder(){
return new BCryptPasswordEncoder();
}
@Autowired
private UserLoginServiceImpl userLoginService;
//加密密码类


@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
/*
* 如果你用的是在数据库中存储用户名和密码,那么一般是要在用户注册时就使用BCrypt编码将用户密码加密处理后存储在数据库中,
* 并且修改configure()方法,加入".passwordEncoder(new BCryptPasswordEncoder())",
* 保证用户登录时使用bcrypt对密码进行处理再与数据库中的密码比对.如下:
* */
auth.userDetailsService(userLoginService).passwordEncoder(bCryptPasswordEncoder());

}

@Override
protected void configure(HttpSecurity http) throws Exception {
http.exceptionHandling().accessDeniedPage("/unauth.html");
http.formLogin()
/*登陆页面*/
.loginPage("/user/gologin")
/*登陆表访问路径*/
.loginProcessingUrl("/user/login")
/*默认的登陆成功跳转页面*/
.defaultSuccessUrl("/user/goindex")
.permitAll()
.and().authorizeRequests()
/*配置那些路径可以直接访问*/
.antMatchers("/unauth.html","/user/gologin").permitAll()
/*为某些路径设置访问权限*/
.antMatchers("/user/admins").hasAuthority("admins")
/*设置其中任意权限都可以访问*/
//.antMatchers("user/admins").hasAnyAuthority("admins","sa")
/*为某些路径设置某些角色访问 还有hasAnyRole 这里的角色会被处理加上前缀ROLE_ 与查出的角色进行比较*/
//.antMatchers("/user/").hasRole("admin")
/*其余路径需要验证授权*/
.anyRequest().authenticated()
.and().csrf().disable();
}
}

auth.userDetailsService(userLoginService).passwordEncoder(bCryptPasswordEncoder());
注:使用bCryptPasswordEncoder(实现了PasswordEncoder接口)加密 , SpringSecurity推荐使用 ,
对表单提交的用户密码进行加密(encode方法) 与数据库查出来的加密过后的密码进行比较(matches方法)

3,实现UserDetailsService接口 重写loadUserByUsername方法

@Service
public class UserLoginServiceImpl implements UserDetailsService {

@Autowired
private UserMapper userMapper;

@Resource(name = "bCryptPasswordEncoder")
private PasswordEncoder passwordEncoder;

@Override
public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {

User result = userMapper.selectById(1);
//查询权限 复制给权限列表 橘色配置也在这里
List<GrantedAuthority> auths= AuthorityUtils.commaSeparatedStringToAuthorityList("abc,ROLR_admin");
if (result==null){
throw new UsernameNotFoundException("用户不存在");
}
return new org.springframework.security.core.userdetails.User(s,passwordEncoder.encode(result.getPassword()),auths);
}
}