依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
注入bean
@SpringBootApplication
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class, args);
}
@Bean
public BCryptPasswordEncoder encoding(){
return new BCryptPasswordEncoder();
}
}
安全配置類
authenticated()
要求認證后才能訪問。
如果用戶沒有認證的話,Spring Security
的Filter
將會捕獲該請求,並將用戶重定向到應用的登錄頁面。
/**
* 安全配置類
*/
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
//authorizeRequests:聲明配置是權限配置
//antMatchers:路徑
//permitAll:任何權限都可以訪問,不需要身份認證
//anyRequest:任何請求
//authenticated:認證后才能訪問
//and().csrf().disable():固定寫法,表示csrf攔截失效
http
.authorizeRequests()
.antMatchers("/**").permitAll()
.anyRequest().authenticated()
.and().csrf().disable();
}
}
access(String) 如果給定的SpEL表達式計算結果為true,就允許訪問
anonymous() 允許匿名用戶訪問
authenticated() 允許認證的用戶進行訪問
denyAll() 無條件拒絕所有訪問
fullyAuthenticated() 如果用戶是完整認證的話(不是通過Remember-me功能認證的),就允許訪問
hasAuthority(String) 如果用戶具備給定權限的話就允許訪問
hasAnyAuthority(String…) 如果用戶具備給定權限中的某一個的話,就允許訪問
hasRole(String) 如果用戶具備給定角色(用戶組)的話,就允許訪問
hasAnyRole(String…) 如果用戶具有給定角色(用戶組)中的一個的話,允許訪問
hasIpAddress(String) 如果請求來自給定ip地址的話,就允許訪問
not() 對其他訪問結果求反
permitAll() 所有權限無條件允許訪問
rememberMe() 如果用戶是通過Remember-me功能認證的,就允許訪問
密碼加密與解密
@Autowired
private BCryptPasswordEncoder encoding;
public void add(Admin admin) {
//加密
admin.setPassword(encoding.encode(admin.getPassword()));
adminDao.save(admin);
}
encoding.matches(admin.getPassword(),sqlAdmain.getPassword())