1.spring security是什么?
是一个能够代替大量过滤器、拦截器源代码的框架。有了它,我们可以轻易实现页面跳转的逻辑。它主要由认证和授权构成。
2.简易搭建
(1)导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
(2)自定义config类
自己写一个SpringSecurity的配置类,并且一定要继承WebSecurityConfigurerAdapter 这个类,并且加上@EnableWebSecurity注解。
//这个注解一定要加
@EnableWebSecurity
public class SpringSecurity extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
//init界面允许所有权限,vip1只允许vip1权限,以此类推
http.authorizeRequests()
.antMatchers("/user/init").permitAll()
.antMatchers("/user/vip1").hasRole("v1")
.antMatchers("/user/vip2").hasRole("v2")
.antMatchers("/user/vip3").hasRole("v3");
//如果没有权限,会自动跳转到/login界面(框架自带,也可以用自己写的页面替代)
http.formLogin();
//注销的页面是/logout界面(也可以用自己写的替代),成功后跳转到init
http.logout().logoutSuccessUrl("/user/init");
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//BCryptPasswordEncoder是一种加密方式
//root有v1,v2,v3权限,guest只有v1权限
auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
.withUser("root").password(new BCryptPasswordEncoder().encode("123456")).roles("v1","v2","v3").and()
.withUser("guest").password(new BCryptPasswordEncoder().encode("123456")).roles("v1");
}
}
(3)补充controller
@RestController
@RequestMapping("/user")
public class IndexController {
@GetMapping("/init")
public String init(){
return "这是init";
}
@GetMapping("/vip1")
public String vip1(){
return "这是vip1" ;
}
@GetMapping("/vip2")
public String vip2(){
return "这是vip2" ;
}
@GetMapping("/vip3")
public String vip3(){
return "这是vip3" ;
}
}
3.测试
1.输入localhost:8080/user/init,界面跳转正确。
2.输入localhost:8080/user/vip1,界面跳转到登陆界面。
3.用root登陆后,成功进入vip1界面,此时访问vip2,vip3都可以。
4.输入localhost:8080/logout,界面跳转到注销界面
5.重新用guest身份登陆,只能进入vip1界面。