- 自定义 “security” 配置类
- 新建类继承 WebSecurityConfigurerAdapter
- 覆盖 “configure” 方法,定义配置项
@Configuration
public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
//登录方式:表单登录(http.formLogin()),弹框登录(http.httpBasic())
http.formLogin()
// 任何请求都需要身份认证
.and()
.authorizeRequests()
.anyRequest()
.authenticated();
}
/**
* 声明密码加密解密 Bean
* BCryptPasswordEncoder implements PasswordEncoder
* encode : 加密方法
* matches :前台密码和数据库加密的密码作比较
*/
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
}
- security 登录最后一道工序
@Component
public class MyUserDatailsService implements UserDetailsService {
private Logger logger = LoggerFactory.getLogger(MyUserDatailsService.class);
@Autowired
private PasswordEncoder passwordEncoder;
/**
*
* @param username : 前台登录( 登录名称 )传过来的 username
* @return
* @throws UsernameNotFoundException
*/
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
logger.info("当前登录的用户名:" + username);
/*
* 认证流程:
* 1、注入数据库Dao层,根据 "username" 去数据库查询此用户信息
* 2、使用 "User" 类 spring-security 的 User
* 3、在自己使用的时候,可以自定义 User 类实现 UserDetails 接口
* 4、通过数据库的字段定义实现业务逻辑
*/
/*
passwordEncoder.encode("123456")应该是在注册的时候调用,并把返回值存入数据库
登录的时候将返回值取出和前台输入的密码做比较
passwordEncoder.matches(rawPassword,encodedPassword)
*/
String password = passwordEncoder.encode("123456");
logger.info("数据库密码是:" + password);
return new User(username,passwordEncoder.encode("123456")
, true ,true ,true ,true
, AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));
/*
四个 true 表示:
* @param : enabled 是否删除(标识,不可恢复)
* @param : accountNonExpired 用户是否过期
* @param : credentialsNonExpired 密码是否过期
* @param : accountNonLocked 是否冻结(标识,可恢复)
new User(username,password,authorities):
从数据库中取出:
username : 用户名
password : 密码
authorities : 用户的接口权限(菜单权限)...
*/
}
}