一级目录
springsecurity的核心就是认证和授权,其本质就是一组链式的过滤器,用户发送请求进来,判断有没有请求的权限。
简单配置
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
//以下五步是表单登录进行身份认证最简单的登陆环境
http.formLogin() //表单登陆 1
.and() //2
.authorizeRequests() //下面的都是授权的配置 3
.anyRequest() //任何请求 4
.authenticated(); //访问任何资源都需要身份认证 5
}
}
启动项目可以看到下面的登陆页面,用户名默认user,密码在控制台输出
当然,security还可以自定义登陆页面并从数据库获取用户
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
/**
* 介绍
* springboot2.x引入的security版本是5.x的,这个版本需要提供一个PasswordEncoder实例,不然就会报错
* @return
*/
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
//以下五步是表单登录进行身份认证最简单的登陆环境
http.formLogin() //表单登陆 1
.loginPage("/login.html") //指定登陆页面
.and() //2
.authorizeRequests() //下面的都是授权的配置 3
.antMatchers("/login.html").permitAll()//访问此地址就不需要进行身份认证了,防止重定向死循环
.anyRequest() //任何请求 4
.authenticated(); //访问任何资源都需要身份认证 5
}
}
如果要实现查询数据库,就要实现UserDetailsService类,添加自己的配置,并且在serviceImpl层通过UsernamePasswordAuthenticationToken,提交用户名和密码到UserDetailsService,在UserDetailsServiceImpl中查询数据库即可。
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(userName, password);
Authentication authenticate = authenticationManager.authenticate(authenticationToken);