一、简单配置
1.配置文件中自定义用户密码
application.yml
#配置文件中自定义用户名密码
spring:
security:
user:
name: llb
password: 123456
2.关闭验证功能
//排除security的配置,让它不起作用
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
二、基于内存管理用户
1.在配置类中配置用户密码信息
写一个配置类继承WebSecurityConfigurerAdapter,实现父类的configure(AuthenticationManagerBuilder auth)方法
@Configuration//表示当前类是一个配置类,在这个类中方法的返回值是java对象,这些对象放入到Spring容器中
@EnableWebSecurity//启用SpringSecurity安全框架的功能
//ctrl+o 重写父类方法
public class MyWebSecurityConfig extends WebSecurityConfigurerAdapter {
//在方法中来配置用户和密码的信息,作为登录的数据
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
PasswordEncoder pe = passwordEncoder();
auth.inMemoryAuthentication().withUser("user").password(pe.encode("123456")).roles();
auth.inMemoryAuthentication().withUser("admin").password(pe.encode("123456")).roles();
}
//创建密码的加密类
//@Bean:把方法返回值的对象放入到spring容器中
@Bean
public PasswordEncoder passwordEncoder(){
//创建PasswordEncoder的实现类
return new BCryptPasswordEncoder();
}
}
2.设置角色访问权限
2.1在configure(AuthenticationManagerBuilder auth)方法中使用.roles()设置用户所拥有的角色
2.2使用注解启用方法级别的认证
@EnableGlobalMethodSecurity(prePostEnabled = true)
ps:prePostEnabled=true表示可以使用@PreAuthorize和@PostAuthrize
配置类代码如下:
@Configuration//表示当前类是一个配置类,在这个类中方法的返回值是java对象,这些对象放入到Spring容器中
@EnableWebSecurity//启用SpringSecurity安全框架的功能
@EnableGlobalMethodSecurity(prePostEnabled = true)//启用方法级别的认证 prePostEnabled=true表示可以使用@PreAuthorize和@PostAuthrize
//ctrl+o 重写父类方法
public class MyWebSecurityConfig extends WebSecurityConfigurerAdapter {
//在方法中来配置用户和密码的信息,作为登录的数据
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
PasswordEncoder pe = passwordEncoder();
//定义两个角色 normal,admin
auth.inMemoryAuthentication()
.withUser("user")
.password(pe.encode("123456"))
.roles("normal");
auth.inMemoryAuthentication()
.withUser("admin")
.password(pe.encode("123456"))
.roles("admin","normal");
}
//创建密码的加密类
//@Bean:把方法返回值的对象放入到spring容器中
@Bean
public PasswordEncoder passwordEncoder(){
//创建PasswordEncoder的实现类
return new BCryptPasswordEncoder();
}
}
Controllerr代码如下:
//normal,admin都可以访问
@RequestMapping("/helloUser")
@ResponseBody
@PreAuthorize(value = "hasAnyRole('admin','normal')")
public String helloCommonUser(){
return "Hello user";
}
//admin才能访问
@RequestMapping("/helloAdmin")
@ResponseBody
@PreAuthorize(value = "hasAnyRole('admin')")
public String helloAdmin(){
return "Hello admin";
}