最近打算学一套安全框架,目前由于springboot、springcloud的火热,因此springsecurity是第一选择。
一、先看看基本原理
spring security 实际上就是通过一系列的过滤器对请求进行过滤,最终对不合法的请求抛出相应的异常。
二、接下来看看具体实现
1)引入security的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2)编写个测试用的接口
@GetMapping("/user")
public String getUser(){
return "this is security";
}
3)访问看看效果
访问这个user接口的时候发现请求被拦截了,需要输入用户名和密码,spring security默认用户名是user,每次启动项目的时候会再控制台打印,输入用户名和密码后重新跳转到user接口
4)自定义用户名和密码
在实际应用中,以上肯定是不能满足需求的,我们需要从数据库进行验证用户名和密码。
@Component
@Slf4j
public class MyUserDetailService implements UserDetailsService {
// 加密处理
@Autowired
private PasswordEncoder passwordEncoder;
@Override
public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
// 这一块用来处理用户合法性,如从数据库里验证用户
log.info("登录的用户名={}",userName);
return new User(userName,passwordEncoder.encode("123456"),true,true,true,true, AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));
}
}
@Configuration
public class BrowserConfig extends WebSecurityConfigurerAdapter {
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.formLogin() //表单提交的所有请求都进行身份认证
.and()
.authorizeRequests()
.anyRequest()
.authenticated();
}
}
UserDetailsService 是security封装好的处理用户认证逻辑的接口。
WebSecurityConfigurerAdapter 是拦截器,我们重写了configure方法,用来对http请求进行认证和授权。
测试一下,随便输入一个用户名,密码输入123456,然后会跳转到user接口。