1.导入security依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
thymeleaf 依赖 前端使用
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
thymeleaf 依赖 + security依赖 前端+后端合并使用
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity4</artifactId>
<version>3.0.4.RELEASE</version>
</dependency>
@EnableWebFluxSecurity
public class Security extends WebSecurityConfigurerAdapter {
// 链式编程
@Override
protected void configure(HttpSecurity http) throws Exception {
// 首页所有人可以访问,功能页只有对应权限的人才能访问
http.authorizeRequests()
//请求授权的规则
// 首页所有人可以访问
.antMatchers("/").permitAll()
// vip1 可以访问 level1/** 所有
.antMatchers("/level1/**").hasRole("vip1")
// vip2 可以访问 level2/** 所有
.antMatchers("/level2/**").hasRole("vip2")
// vip3 可以访问 level3/** 所有
.antMatchers("/level3/**").hasRole("vip3");
// 没有权限会默认到登录页面,需要开启登录的页面
// 定制登陆页面loginPage("/toLogin");
http.formLogin().loginPage("/toLogin");
//关闭 csrf 功能 这是一个网站保护功能
http.csrf().disable();
// 注销.开启注销功能,点击注销跳到首页
http.logout().logoutSuccessUrl("index");
//开启记住功能,默认保存时间两周
http.rememberMe();
}
//认证
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//passwordEncoder(new BCryptPasswordEncoder()) 密码加密格式给密码加密
auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
//从数据库中拿到姓名,以及密码
//auth.jdbcAuthentication 表示从数据库中拿到名字和密码
// 给用户认证 name ,password. roles 级别"vip2","vip3"
.withUser("liuli").password(new BCryptPasswordEncoder().encode("123456")).roles("vip2","vip3")
.and()
.withUser("root").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2","vip3")
.and().withUser("guest").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1");
}
}