SpringBoot学习笔记(⼗)SpringSecurity安全框架⼀、什么是Spring Security?
Spring Security致⼒于为Java应⽤提供核⼼功能认证和授权管理,其核⼼就是⼀组过滤器链,项⽬启动后会⾃动配置。简单来说,Spring Security就是通过过滤器来验证你是谁,你是什么⾝份,然后给予相应的授权,让你能够⼲某些事。
⼆、SpringSecurity使⽤
1、⼊门项⽬
1. 创建项⽬,并添加web和security的依赖
建议在创建项⽬时直接添加,⽽不是后⾯在l中添加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2. 添加控制器
ller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String home(){
return"Hello ,spring security!";
}
}
3. 测试
在浏览器中访问
然后就会弹出
说明security⽣效
默认⽤户名是user
SpringSecurity启动时会⾃动⽣成默认密码,在IDEA的控制台⾥可以看到
输⼊⽤户名和密码即可成功访问
2、⾓⾊访问控制
我们设置两个⾓⾊,admin可以访问所有接⼝,⽽user只能访问⼀部分接⼝
1. 设置两个⾓⾊的资源
UserController类
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@RequestMapping("/user/hello")
public String hello(){
return"user,Hello !";
}
}
AdminController类
ller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AdminController {
@RequestMapping("/admin/hello")
public String hello(){
return"admin,Hello !";
}
}
2. 配置两个⾓⾊
本来⽤户和⾓⾊是保存在数据库中的,这⾥只是单纯地创建了两个存放于内存的⽤户和⾓⾊创建config⽬录,并创建SecurityConfig类
import t.annotation.Bean;
import t.annotation.Configuration;
import org.fig.annotation.authentication.builders.AuthenticationManagerBuilder; import org.fig.annotation.web.builders.HttpSecurity;
import org.fig.figuration.WebSecurityConfigurerAdapter; import org.pto.password.NoOpPasswordEncoder;
import org.pto.password.PasswordEncoder;
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
/*不对密码进⾏加密*/
@Bean
PasswordEncoder passwordEncoder(){
Instance();
}
@Override
protected void configure(AuthenticationManagerBuilder auth)throws Exception {
auth.inMemoryAuthentication()
/*管理员⽤户具备ADMIN和USER⾓⾊*/
.withUser("admin").password("admin").roles("ADMIN","USER")
.
and()
/*普通⽤户*/
.withUser("aoxiu").password("aoxiu").roles("USER");
}
@Override
protected void configure(HttpSecurity http)throws Exception {
http
.authorizeRequests()springboot框架是干嘛的
/*普通⽤户访问的url*/
.antMatchers("/user/**").hasRole("USER")
/*管理员⽤户访问的url*/
.
antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()//其他多有路径都必须认证
.and()
.formLogin()
.loginProcessingUrl("/login")
.permitAll()//访问“/login”接⼝不需要进⾏⾝份认证了,防⽌重定向死循环
.and()
.csrf().disable();//关闭csrf
}
}
然后就可以发现,若要访问admin/hello,⽤户名和密码必须是admin才可以
若使⽤aoxiu这种⽤户的⾝份就会报错
三、基于数据库的认证
1、SpringSecurity基于数据库认证
1. 创建项⽬,添加如下依赖
lombok⽤于使⽤注解替代getter、setter等⽅法
2. 在l⽂件中配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC    username: root
password: root
driver-class-name: sql.jdbc.Driver
logging:
level:
mybatis:
mapper-locations: classpath:mappers/*.xml
type-aliases-package: ample.securitydatebase.mapper
server:
port: 8082
3. 创建实体类
UserInfo
package ity;
import lombok.Data;
import org.GrantedAuthority;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。